在我的Android项目,我有一个Service
类:WakefulBroadcastReceiver得到抛出java.lang.ClassNotFoundException
public class MyService extends Service{
...
//Defined a WakefulBroadcastReceiver as a inner static class
public static class DeviceRebootReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do something when user reboot the device
}
}
}
正如你看到的上面,我在MyService
类中定义的WakefulBroadcastReceiver
为内部静态类。当用户重新启动他/她的设备时,该接收器接收广播。
我的AndroidManifest.xml是这样的:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.project"
android:versionCode="1"
android:versionName="2.1" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
...>
<activity ...> ... </activity>
<service android:name="com.my.project.MyService"
android:exported="false"/>
<receiver
android:name="com.my.project.MyService$DeviceRebootReceiver"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
但是当我运行重启设备后,我的应用程序&,我logcat的显示我的错误:
Unable to instantiate receiver com.my.project.MyService$DeviceRebootReceiver:
java.lang.ClassNotFoundException: com.my.project.MyService$DeviceRebootReceiver in loader dalvik.system.PathClassLoader[/data/app/com.my.project-1.apk]
为什么我的接收机类是不能够被系统加载?
=====更新======
我也试图让我的DeviceRebootReceiver
为单独类(DeviceRebootReceiver.java),并提出了AndroidManifest.xml
改为:
<application...>
<receiver
android:name="com.my.project.DeviceRebootReceiver"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
但我仍然得到了logcat中类似的错误:
java.lang.RuntimeException: Unable to instantiate receiver com.my.project.DeviceRebootReceiver: java.lang.ClassNotFoundException
是您的服务在重启设备时运行吗?可能它;因为你的服务在重启时死了,所以子类无法到达,没有发现异常! – Saqib
@Saqib,我也试图把我的DeviceRebootReceiver放在它自己的类文件中,但是类似的错误仍然在增加。请检查我的更新。 –
嗯,你有没有尝试加入'android:permission =“android.permission.RECEIVE_BOOT_COMPLETED”' – Saqib