2016-08-31 14 views
0

Unity3d Androidプラグイン内でサービスを開始しようとしていますが、動作させることができません。 Android Studioのテストアプリで作業していますが、サービスコールが単一性の中で失敗します。サービスを開始するために使用されるUnity3D Androidプラグイン:サービスを開始できません。インテントエラー

私のサービスクラス

public class ProximityService extends Service { 
    private String TAG = "iProximity: "; 

    NotificationManager _NotificationManager; 
    private Context _Context; 
    private static Timer _Timer = new Timer(); 

    public ProximityService() { 
    } 

    private void sendNotification() { 

     Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder builder; 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, iRealUnityPlayerActivity.class), 0); 

     builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ireal) 
       .setContentTitle("Notification") 
       .setContentText("message") 
       .setTicker("msg: mensaje") 
       .setSound(sound) 
       .setAutoCancel(true); 

     builder.setContentIntent(contentIntent); 
     _NotificationManager.notify(0, builder.build()); 

    } 

    @Override 
    public void onCreate() { 
     Log.i(TAG, "onCreate()"); 
     super.onCreate(); 

     _Context = getApplicationContext(); 
     _NotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    } 

    // methods 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.i(TAG, "onStartCommanf()"); 

     //startProximity(); 
     sendNotification(); 

     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     Log.i(TAG, "onBind()"); 
     // TODO: Return the communication channel to the service. 
     return null; 
    } 

} 

Javaクラス:サービスを開始する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 String StartProximityService() 
    { 
     String result = "OK"; 

     try 
     { 
     myContext.startService(new Intent(myContext, ProximityService.class)); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      result = e.getMessage(); 
     } 

     return result; 

    } 

    public static String Dummy() { 
     return "DONEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; 
    } 

} 

ユニティC#コード:

AndroidJavaClass unityClass; 
    AndroidJavaObject unityActivity; 
    AndroidJavaObject unityContext; 
    AndroidJavaClass customClass; 

    string a1 = ""; 
    string a2 = ""; 
    string a3 = ""; 
    string a4 = ""; 

    void Start() { 

     //Replace with your full package name 
     sendActivityReference("info.ireal.proximitylib.StatusCheckStarter"); 

     //Now, start service 
     startService(); 

     Debug.Log ("START"); 
    } 

    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() 
    { 
     a4 = customClass.CallStatic<string> ("Dummy"); 
     a3 = customClass.CallStatic<string>("StartProximityService"); 
    } 

ダミーメソッドが動作していて、文字列値を返しますが、サービスは機能しません。

ADB logcatメッセージ:

サービスの意図を{開始できません CMP = info.ireal.proximitytest/info.ireal.proximitylib.ProximityService VirtualScreenParam = PARAMS {mDisplayId = -1、NULL、MFLAGS = 0x00000000の)}} U = 0:

見つからない私は本当によろしく

任意の助けに感謝マリアーノ

私はこのthreadのソリューションを使用していますが、それでも問題はありません。

EDIT

私のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.unity3d.player" 
    android:installLocation="preferExternal" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <supports-screens 
     android:smallScreens="true" 
     android:normalScreens="true" 
     android:largeScreens="true" 
     android:xlargeScreens="true" 
     android:anyDensity="true"/> 

    <application 
     android:theme="@style/UnityThemeSelector" 
     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="info.ireal.proximitylib.ProximityService" /> 
     <!---<service android:name="ProximityService" />--> 

    </application> 

</manifest> 

答えて

0

これはマニフェストである可能性があります。サービスタグにサービスクラスを含めるようにしてください。 以下のいずれかの問題が考えられます。ビルド、実行、テスト試してみてください。

。クラスをマニフェストに追加します。

<application 
    <service android:name=".ProximityService" /> 
</application> 

.Addマニフェストへの完全なパスを持つクラス。 これが動作しない場合は、フルサービスクラスのパッケージ名を使用

<application 
    <service android:name="info.ireal.proximitylib.ProximityService" /> 
</application> 

.Addユニティ自体からマニフェストにクラス。再び

、それが失敗した場合、あなたの資産にその場所のファイルからコピーし<UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk

AndroidManifest.xmlを行く\プラグイン\ Androidのディレクトリには、マニフェストで上記のサービスタグのコードが含まれています。保存して実行します。

。最後にContextの代わりにActivityを使用してください。Java側に

変更:

.Rename static Context myContext; B

static Activity myActivity;から .Change

public static void ReceiveContextInstance(Context tempContext) { 
    myContext = tempContext; 
} 

public static void ReceiveContextInstance(Activity tempActivity) { 
    myActivity = tempActivity; 
} 
012にC#の側
のの

変更:customClass.CallStatic("ReceiveContextInstance", unityActivity);

+0

こんにちはプログラマーと

C .Replace customClass.CallStatic("ReceiveContextInstance", unityContext);、あなたの答えのためにどうもありがとうございました、私はあなたのヒントに従って、まだ同じエラーを取得し、私は私を掲載しますAndroidManifest.xml、まだAndroidプログラミングのnoob、プラグインの依存関係に関連する可能性がありますか? – on4ir4m

+0

ライブラリproximitylibは、com.android.support:appcompat-v7:24.0.0にshow dependenciyを表示します。これをPluginディレクトリに含めるべきですか? – on4ir4m

+0

いいえ、しないでください。私はそれが問題だとは思わない。私はあなたの質問の下で質問をしました。その質問を確認し、ここで答えてください。 – Programmer

関連する問題