从Unity3D代码启动android服务

在我的用于android的Unity3D应用程序中,我需要启动一个服务,它将在后台运行。 我无法弄清楚我该怎么做。 必须在活动上调用方法startService() ,但我不知道如何将当前的unity活动从unity脚本传递到我的android插件。 我还没有找到任何方法来获取静态方法中的活动并在其中运行startService()

据我了解序列,我需要获得主要的Unity3D活动并从中启动服务。

我的class级应该叫服务。

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("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("currentActivity"); AndroidJavaClass customClass = new AndroidJavaClass(packageName); customClass.CallStatic("StartCheckerService", unityActivity); } 

注意您必须将com.example.StatusCheckStarter替换为StatusCheckStarter类的完整包。