2016-10-13 10 views
1

BootReceiver никогда не называли, даже если система загрузки с использованием этой команды:Почему BroadcastReceiver не вызван?

ADB оболочки утра широковещательный -a -n android.intent.action.BOOT_COMPLETED 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 оболочки утра широковещательный -a -n android.intent.action.BOOT_COMPLETED 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]] at 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]] at at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:67) at at java.lang.ClassLoader.loadClass (ClassLoader.java:497) at at java.lang.ClassLoader.loadClass (ClassLoader.java:457) at at android.app.ActivityThread.handleReceiver (ActivityThread.java:2513) at at android.app.ActivityThread.access $ 1800 (ActivityThread.java:161) at at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1341) at at android.os.Handler.dispatchMessage (Handler. java: 102) at at android.os.Looper.loop (Looper.java:157) at 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 (родной метод) --- Конец внутреннего исключения st ack trace --- at java.lang.RuntimeException: не удалось создать экземпляр приемника test.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]] at android.app.ActivityThread.handleReceiver (ActivityThread.java: 2518) at at android.app.ActivityThread.access $ 1800 (ActivityThread.java:161) at at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1341) at at android.os.Handler. dispatchMessage (Handler.java:102) at at android.os.Looper.loop (Looper.java:157) at 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 Caused by: 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 at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:67) at at java.lang.ClassLoader.loadClass (ClassLoader.java:497) at at java.lang.ClassLoader.loadClass (ClassLoader.java:457) at at android.app.ActivityThread.handleReceiver (ActivityThread.java:2513) at ... 10 больше

+0

Взгляните на http://stackoverflow.com/questions/39713862/xamarin-form-android-doesnt-received-the-broadcast-after-reboot/39714163#39714163 – SushiHangover

+0

Я никогда не заставляю приложение закрываться. Я даже показываю активность на экране – LittleFunny

+0

Посмотрите на свой * сгенерированный * манифест и имена классов, которые на самом деле содержатся. – SushiHangover

ответ

0

Возможно, это com.android.canbedeleted.test/test.Droid.BootReceiver.

С выпуском 5.0 имена пакетов по умолчанию для Android Callable Wrappers будут основаны на MD5SUM имени, присвоенного сборке экспортируемого типа. Это позволяет получить одно и то же полное имя из двух разных сборок и не получить ошибку упаковки.

Проверьте, что генерируемый BootReceiver имя, под \ Obj \ Debug \ Android \ AndroidManifest.xml файл вашего проекта.

Узнайте больше о Android отзывной обертке Именование тему here

0

Пожалуйста, удалите приемник в вашем AndroidManifest.xml. Вам не нужно объявлять его там, если вы используете такие атрибуты, как BroadcastReceiver и IntentFilter. В противном случае сгенерированный манифест (\obj\Debug\android\AndroidManifest.xml) будет содержать два сообщения ресивера, и это может вызвать некоторые проблемы. Преимущество использования атрибутов заключается в том, что вам не нужно заботиться о правильных именах классов.

Смежные вопросы