2016-10-13 31 views
1

BootReceiverシステムは、このコマンドを使用して、ブートアップした場合でも呼び出されることはありません:BroadcastReceiverがなぜ呼び出されないのですか?

adbのシェルAM放送-a android.intent.action.BOOT_COMPLETED -n com.android.canbedeleted.test/.BootReceiver

私はマニフェストに入れている

権限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.android.canbedeleted.test"> 
<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<application android:label="test"> 
<receiver android:name="test.Droid.BootReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
</application> 

レシーバタグ私はそれを削除しようとしましたが、別のものは見えません。

[BroadcastReceiver] 
[IntentFilter (new string[] { Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.HighPriority)] 
public class BootReceiver : BroadcastReceiver 
{ 
    public override void OnReceive(Context context, Intent intent) 
    { 
     System.Diagnostics.Debug.WriteLine ("*********************************** Broadcast Received *********************************"); 
     Toast.MakeText(context, "Received intent!", ToastLength.Short).Show(); 
     //Intent message = new Intent(); 
     //message.AddFlags(ActivityFlags.NewTask); 
     //message.SetClass(context, typeof(KeyboardService)); 
     //context.StartService(intent); 
    } 
} 

このようなcmdを入力しようとしても、以下のようなスタックトレースがあります。 test.Droidはクラスの名前空間です。

adbのシェルAM放送-a android.intent.action.BOOT_COMPLETED -n com.android.canbedeleted.test/test.Droid.BootReceiver

のStackTrace

れるjava.lang .RuntimeException:受信者をインスタンス化することができませんtest.Droid.BootReceiver:java.lang.ClassNotFoundException: "test.Droid.BootReceiver"クラスが見つかりませんでした:DexPathList [[zipファイル "/data/app/com.android.canbedeleted .test-8.apk "]、nativeLibraryDirectories = [/ data/app-lib/com.android.canbedeleted.test-8、/ vendor/lib、/ system/lib]] ---> Java.Lang.ClassNotFoundException:パスに "test.Droid.BootReceiver"クラスが見つかりませんでした:DexPathList [[zipファイル "/data/app/com.android.canbedeleted.test-8クラスライブラリを見つけられませんでした。 "、" .apk "]、nativeLibraryDirectories = [/ data/app-lib/com.android.canbedeleted.test-8、/ vendor/lib、/ system/lib]] java.lang.ClassNotFoundException: DexPathList [[zipファイル "/data/app/com.android.canbedeleted.test-8.apk"],nativeLibraryDirectories=[/data/app-lib/com.android.canbedeleted]をクリックします。at at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) at at java.lang.ClassLoader.loadClass(ClassLoader.java:497) (英語の場合は、test-8、/ vendor/lib、/ system/lib] at android.app.ActivityThread.handleReceiver(ActivityThread.java:2513)の から(英語)のjava.lang.ClassLoader.loadClass(ClassLoader.java:457)にあります。 android.app.ActivityThread.ActivityThreadでの3210 at $ 1800(ActivityThread.java:161)とandroid.os.Handler.dispatchMessage(Handler.AccessThread.access)の のatとandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341)の のところで。 java:102) atとandroid.os.Looper.loop(Looper.java:157) atからandroid.app.ActivityThread.main(ActivityThread.java:5356) at at java.lang.reflect.Method.invokeNative (ネイティブメソッド) at at java.lang.reflect.Mava.subs .android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at at dalvik.system.NativeStart.main(ネイティブメソッド) ---内部例外stの終了ack trace ---at java.lang.RuntimeException:レシーバをインスタンス化できません.Droid.BootReceiver:java.lang.ClassNotFoundException:パス上に "test.Droid.BootReceiver"クラスが見つかりませんでした:DexPathList [[zip file " /data/app/com.android.canbedeleted.test-8.apk"],nativeLibraryDirectories=[/data/app-lib/com.android.canbedeleted.test-8、/ vendor/lib、/ system/lib]] android.app.ActivityThread.handleReceiver(ActivityThread)の から。java:2518) atからandroid.app.ActivityThread.access $ 1800(ActivityThread.java:161) atからandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341) atとandroid.os.Handlerで。 android.os.Looper.loop(Looper.java:157)の からのディスパッチメッセージ(Handler.java:102)at android.app.ActivityThread.main(ActivityThread.java:5356) at at java.lang.reflect .Method.invokeNative(ネイティブメソッド) at at java.lang.reflect.Method.invoke(Method.java:515) at at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265) at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at at dalvik.system.NativeStart.main(ネイティブメソッド) at原因:java.lang.ClassNotFoundException:パス上に "test.Droid.BootReceiver"クラスが見つかりませんでした:DexPathList [[zipファイル "/data/app/com.android.canbedeleted.test-8.apk"] 、nativeLibraryDirectories = [/ data/app-lib/com.android.canbedeleted.test-8、/ vendor/lib、/ system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) atClassLoader.loadClass(ClassLoader.java:497) at at java.lang.ClassLoader.loadClass(ClassLoader.java:457) atのandroid.app.ActivityThread.handleReceiver(ActivityThread.java:2513) at 10 more

+0

http://stackoverflow.com/questions/39713862/xamarin-form-android-doesnt-received-the-broadcast-after-reboot/39714163#39714163 – SushiHangover

+0

私は決してアプリケーションを閉じることはありません。私は、画面上にアクティビティを表示することさえできます。 – LittleFunny

+0

あなたの* generated *マニフェストと、実際に含まれているクラス名を見てください。 – SushiHangover

答えて

0

com.android.canbedeleted.test/test.Droid.BootReceiverが正しくない可能性があります。

5.0のリリースでは、Android Callable Wrappersのデフォルトのパッケージ名は、エクスポートされるタイプのアセンブリ修飾名のMD5SUMに基づいています。これにより、2つの異なるアセンブリから同じ完全修飾名が提供され、パッケージングエラーは発生しません。プロジェクトの\ OBJ \デバッグ\ androidの\ AndroidManifest.xmlをファイルの下で、BootReceiver名を生成しているもの

チェック。

Androidの呼び出し可能ラッパーが話題here

0

の命名についての詳細を読むあなたのAndroidManifest.xmlに受信機を削除してください。 BroadcastReceiverIntentFilterのような属性を使用している場合は、宣言する必要はありません。そうでなければ、生成されたマニフェスト(\obj\Debug\android\AndroidManifest.xml)に2つのという受信者の宣言が含まれ、これはいくつかの問題を引き起こす可能性があります。属性を使用すると、正しいクラス名を気にする必要がないという利点があります。

関連する問題