从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
类的完整包。
- 如何在Xamarin.Android中正确编写自定义UncaughtExceptionHandler
- Unity无法构建apk Android
- Android Unity c#:UnauthorizedAccessException写保存游戏数据
- 使用InputField时隐藏虚拟键盘
- GetAllNetworkInterfaces()抛出exception
- Xamarin.Android:DrawerLayout.LayoutParams中的重力参数
- Firebase云消息传递和C#服务器端代码
- 绑定按钮单击ListView模板MvvMCross
- 设置Xamarin.Forms – “找不到与给定名称匹配的资源……”