即使使用此命令启动系统,BootReceiver也从未调用过:
adb shell am broadcast -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 shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.canbedeleted.test / test.Droid.BootReceiver
栈跟踪
Java.Lang.RuntimeException:无法实例化接收器test.Droid.BootReceiver:java.lang.ClassNotFoundException:未找到类&#34; test.Droid.BootReceiver&#34; on path:DexPathList [[zip file&#34; /data/app/com.android.canbedeleted.test-8.apk"],nativeLibraryDirectories = [/ data / app-lib / com.android.canbedeleted.test -8,/ vendor / lib,/ system / lib]] ---&gt; Java.Lang.ClassNotFoundException:找不到类&#34; test.Droid.BootReceiver&#34; on path:DexPathList [[zip file&#34; /data/app/com.android.canbedeleted.test-8.apk"],nativeLibraryDirectories = [/ data / app-lib / com.android.canbedeleted.test -8,/ vendor / lib,/ system / lib]] 在java.lang.ClassNotFoundException:没找到类&#34; test.Droid.BootReceiver&#34; on path:DexPathList [[zip file&#34; /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) 在java.lang.ClassLoader.loadClass(ClassLoader.java:497) 在java.lang.ClassLoader.loadClass(ClassLoader.java:457) 在android.app.ActivityThread.handleReceiver(ActivityThread.java:2513) at android.app.ActivityThread.access $ 1800(ActivityThread.java:161) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:157) 在android.app.ActivityThread.main(ActivityThread.java:5356) at at java.lang.reflect.Method.invokeNative(Native Method) at at java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at at dalvik.system.NativeStart.main(Native Method) ---内部异常堆栈跟踪结束--- at java.lang.RuntimeException:无法实例化接收器test.Droid.BootReceiver:java.lang.ClassNotFoundException:未找到类&#34; test.Droid.BootReceiver&#34; on path:DexPathList [[zip file&#34; /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) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1341) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:157) 在android.app.ActivityThread.main(ActivityThread.java:5356) at at java.lang.reflect.Method.invokeNative(Native Method) at at java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at at dalvik.system.NativeStart.main(Native Method) at引发者:java.lang.ClassNotFoundException:没找到类&#34; test.Droid.BootReceiver&#34; on path:DexPathList [[zip file&#34; /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) 在java.lang.ClassLoader.loadClass(ClassLoader.java:497) 在java.lang.ClassLoader.loadClass(ClassLoader.java:457) 在android.app.ActivityThread.handleReceiver(ActivityThread.java:2513) 在...... 10多个
答案 0 :(得分:0)
此com.android.canbedeleted.test/test.Droid.BootReceiver
可能不正确。
在5.0版本中,Android Callable Wrappers的默认包名称将基于要导出类型的程序集限定名称的MD5SUM。这允许从两个不同的程序集提供相同的完全限定名称,而不会出现打包错误。
检查项目的 \ _ obj \ Debug \ android \ AndroidManifest.xml 文件下生成的BootReceiver
名称是什么。
详细了解Android Callable Wrapper命名主题here
答案 1 :(得分:0)
请删除AndroidManifest.xml
中的接收者。如果您使用BroadcastReceiver
和IntentFilter
等属性,则无需在此处声明。否则生成的清单(\obj\Debug\android\AndroidManifest.xml
)将包含接收器的两个声明,这可能会导致一些问题。使用这些属性有一个好处,那就是你不必关心正确的类名。