[英]Start android service from Unity3D code
在我的Android的Unity3D應用程序中,我需要啟動一個服務,它將在后台運行。 我無法弄清楚我該怎么做。 必須在活動上調用方法startService() ,但我不知道如何將當前的unity活動從unity腳本傳遞到我的android插件。 我還沒有找到任何方法來獲取靜態方法中的活動並在其中運行startService() 。
據我了解序列,我需要獲得主要的Unity3D活動並從中啟動服務。
我的班級應該叫服務。
public final class StatusCheckStarter {
public static void StartCheckerService()
{
startService(new Intent(this, CheckService.class));
}
}
此代碼不起作用,因為“無法解析方法startService”,我沒有任何東西可以傳遞給這個參數。 我需要獲得當前的活動。
下面是兩種方法將Activity
實例/引用發送到Java插件,該插件不使用onCreate
函數或從UnityPlayerActivity
擴展。
方法1 :發送一次 Activity
引用然后將它存儲在Java中的靜態變量中以供常用:
Java :
public final class StatusCheckStarter {
static Activity myActivity;
// Called From C# to get the Activity Instance
public static void receiveActivityInstance(Activity tempActivity) {
myActivity = tempActivity;
}
public static void StartCheckerService() {
myActivity.startService(new Intent(myActivity, CheckService.class));
}
}
C# :
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaClass customClass;
void Start()
{
//Replace with your full package name
sendActivityReference("com.example.StatusCheckStarter");
//Now, start service
startService();
}
void sendActivityReference(string packageName)
{
unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
customClass = new AndroidJavaClass(packageName);
customClass.CallStatic("receiveActivityInstance", unityActivity);
}
void startService()
{
customClass.CallStatic("StartCheckerService");
}
方法2 :在每個函數調用中發送Activity
引用。
Java :
public final class StatusCheckStarter {
public static void StartCheckerService(Activity tempActivity) {
tempActivity.startService(new Intent(tempActivity, CheckService.class));
}
}
C# :
void Start()
{
//Replace with your full package name
startService("com.example.StatusCheckStarter");
}
void startService(string packageName)
{
AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass customClass = new AndroidJavaClass(packageName);
customClass.CallStatic("StartCheckerService", unityActivity);
}
注意 : 您必須將com.example.StatusCheckStarter
替換為StatusCheckStarter
類的完整包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.