2014-01-13 50 views
0

在我的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 
+0

是您的服务在重启设备时运行吗?可能它;因为你的服务在重启时死了,所以子类无法到达,没有发现异常! – Saqib

+0

@Saqib,我也试图把我的DeviceRebootReceiver放在它自己的类文件中,但是类似的错误仍然在增加。请检查我的更新。 –

+0

嗯,你有没有尝试加入'android:permission =“android.permission.RECEIVE_BOOT_COMPLETED”' – Saqib

回答

3

我有同样的问题,并解决它。

这是关于Android的支持,v4.jar库,你应该只在官方和更新库项目和Android的私人libs文件夹下(从ANDROID_SDK /演员/安卓/支持/复印)在您的项目的Java Build Path中检查到的库。举例来说,我也有过,因为我的项目是使用另一个库(ActionBarSherlock)的Android的支持,v4.jar甚至包括在我的Java构建Android官方支持,v4.jar的ClassNotFoundException的路径,所以我没有选中ActionBarSherlock项目的Android专用库以避免此冗余。

相关问题