3

起動時に開始するサービスを作成しようとしています。

adb に次のエラーが表示されます。

05-31 10:14:24.060 E/AndroidRuntime( 1583):java.lang.RuntimeException: Unable to instantiate receiver MyNameSpace.MyClass.MyBootReceiver: java.lang.ClassNotFoundException: Didn't find class "MyNameSpace.MyClass.MyBootReceiver" on path: /data/app/MyNameSpace.MyClass-1.apk
05-31 10:14:24.060 E/AndroidRuntime( 1583): Caused by: java.lang.ClassNotFoundException: Didn't find class "MyNameSpace.MyClass.MyBootReceiver" on path: /data/app/MyNameSpace.MyClass-1.apk

問題は、そのクラスがのサブクラスとして に存在することを確実に確認できるので、それを見つけることができるように見えるということです。MyBootReceiverMyNameSpaceMyClass

私のマニフェストは次のように定義されています。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          android:versionCode="1" 
          android:versionName="1.0" 
          package="MyNamespace.MyClass">
    <uses-sdk />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

  <application>
    <receiver android:name=".MyBootReceiver">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
      </intent-filter>
    </receiver>
    <activity android:name=".MyActivity"></activity>

  </application>    
</manifest>

これはコードです:

namespace MyNamespace
{
    [Service]
    [IntentFilter(new String[] { "com.xamarin.MyClass" })]
    public class MyClass : IntentService
    {
        private IBinder binder;

        public const string MyUpdatedAction = "MyUpdated";

        protected override void OnHandleIntent(Intent intent)
        {
            var myIntent = new Intent(MyUpdatedAction);

            SendOrderedBroadcast(myIntent, null);
        }

        public override IBinder OnBind(Intent intent)
        {
            binder = new MyServiceBinder(this);
            return binder;
        }

        [BroadcastReceiver]
        [IntentFilter(new string[] { MyUpdatedAction }, Priority = (int)IntentFilterPriority.LowPriority)]
        public class MyBootReceiver : BroadcastReceiver
        {
            public override void OnReceive(Context context, Android.Content.Intent intent)
            {
                Log.Info("MyTrace", "MyReceiver OnReceive action: " + intent.Action);

                if (intent.Action.Contains("BOOT_COMPLETED"))
                {
                    var pushIntent = new Intent(MyUpdatedAction);
                    context.StartService(pushIntent);

                }
            }
        }
    }
}

このことを機能させるために何をする必要がありますか?

4

2 に答える 2