2016-07-14 8 views
0

私の目的は、Unity3Dのアンドロイドプラグインとして.jarファイルを介して追加されたサービスを開始することです。 thisスレッドで私はそれを起動する方法を見つけた、私はfinnalyネイティブコードに得ることができます。しかし、私は、ログに次のような問題が発生しました: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 

私はGoogleで検索して、問題がマニフェストにですが、私が間違っているのかを把握できなかったことが分かりました。ここではサービスがマニフェストで宣言されている方法は次のとおりです。

は、Javaでそのパッケージ名は、実際には同じである
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true"> 
<service android:name="com.activitychecker.adservice.CheckService"/> 
<receiver android:name="com.activitychecker.adservice.StartReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    <action android:name="CheckService" /> 
    </intent-filter> 
</receiver> 

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:

<service android:name="com.activitychecker.adservice.CheckService"/> 

へ: 私はから私のmanifsetを変更した

<service android:name="com.activitychecker.adservice.CheckService"></service> 

、ログエラーに変更:私はとき-同じ例外が発生しました

07-14 17:46:13.455: W/ActivityManager(444): Unable to start service Intent { act=com.activitychecker.adservice.CheckService } U=0: not found 
+0

あなたはCheckServiceとStartReceiverクラスを投稿する場合、それは良いでしょう。私はそれらの中にコードを見たくない。ちょうどそれの青写真とその中の機能。 – Programmer

+0

あなたは[this](http://stackoverflow.com/a/3439838/4366237)を試しましたか? –

+0

質問コード@Programmerを更新しました –

答えて

1

私はIntentでサービスを開始しようとしました。私がContextを使用したときに機能しました。いずれかが存在する場合

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<AndroidJavaObject>("currentActivity"); 
    unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext"); 

    customClass = new AndroidJavaClass(packageName); 
    customClass.CallStatic("receiveContextInstance", unityContext); 
} 

void startService() 
{ 
    customClass.CallStatic("StartCheckerService"); 
} 

コメント:

の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#だから、以下のいずれかが代わりにIntentContextを使用すると、あなたの最後の質問からコードを置き換えます問題。

+0

ありがとう、これは素晴らしいです!完璧に動作します。 –

0

マニフェストをassets/androidフォルダに直接貼り付けた解決方法が見つかりました。

<?xml version="1.0" encoding="utf-8"?> 
 
<manifest 
 
    xmlns:android="http://schemas.android.com/apk/res/android" 
 
    package="com.unity3d.player" 
 
\t android:installLocation="preferExternal" 
 
    android:versionCode="1" 
 
    android:versionName="1.0"> 
 

 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
 
    <supports-screens 
 
     android:smallScreens="true" 
 
     android:normalScreens="true" 
 
     android:largeScreens="true" 
 
     android:xlargeScreens="true" 
 
     android:anyDensity="true"/> 
 

 
    <application 
 
\t \t android:theme="@style/UnityThemeSelector" 
 
\t \t android:icon="@drawable/app_icon" 
 
     android:label="@string/app_name" 
 
     android:debuggable="true"> 
 
     <activity android:name="com.unity3d.player.UnityPlayerActivity" 
 
        android:label="@string/app_name"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 
 
     </activity> 
 
     <service android:name="com.addcomponent.unitynativeplugin.GeoLocation"/> 
 
    </application> 
 
</manifest>

関連する問題