Unity3D Android插件:无法启动服务
我的目标是启动一个服务,通过.jar文件添加为Unity3D中的android插件。 在这个线程中,我发现了如何启动它,我可以最终获得本机代码。 但是我在日志中遇到了以下问题:
07-14 15:02:23.965: W/ActivityManager(444): Unable to start service Intent { cmp=net.calipssoone.bnh/com.activitychecker.adservice.CheckService } U=0: not found
我用谷歌搜索,发现问题在清单中,但无法弄清楚我做错了什么。 以下是清单中声明服务的方式:
它在Java中的包名实际上是相同的: com.activitychecker.adservice
StartReceiver类:
public class StartReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {} }
CheckService类:
public class CheckService extends Service { public void onCreate(){} public long getCurrentTime(){} public void loadInfo(){} public int onStartCommand(Intent intent, int flags, int startId){} public void onDestroy() {} public IBinder onBind(Intent intent) {} public class MyThread extends Thread { public void run() {} public void cancel() {} public boolean check(String bundle){} } private class ScreenBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) {} } }
UPD:我改变了我的观点:
至:
并且日志错误更改为:
07-14 17:46:13.455: W/ActivityManager(444): Unable to start service Intent { act=com.activitychecker.adservice.CheckService } U=0: not found
当我尝试使用Intent
启动服务时,我遇到了同样的exception。 当我使用Context
时,它工作。 因此,将上一个问题中的代码替换为使用Context
而不是Intent
:
Java :
public final class StatusCheckStarter { static Context myContext; // Called From C# to get the Context Instance public static void receiveContextInstance(Context tempContext) { myContext = tempContext; } public static void StartCheckerService() { myContext.startService(new Intent(myContext, CheckService.class)); } }
C# :
AndroidJavaClass unityClass; AndroidJavaObject unityActivity; AndroidJavaObject unityContext; 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"); unityContext = unityActivity.Call ("getApplicationContext"); customClass = new AndroidJavaClass(packageName); customClass.CallStatic("receiveContextInstance", unityContext); } void startService() { customClass.CallStatic("StartCheckerService"); }
评论是否有任何问题。
我发现解决方案直接将清单封装到assets / android文件夹中。