从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
类的完整包。
上述就是C#学习教程:从Unity3D代码启动android服务分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1040811.html