簡體   English   中英

從Unity3D代碼啟動android服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM