2017-03-08 48 views
-1

我已经编写了一个WakefulBroadcastReceiver的子类,它在用户设备重新启动时接收“android.intent.action.BOOT_COMPLETED”操作。

它在我的Nexus设备上正常工作,但在三星,Verizon等设备上没有问题。对于这些设备,我在onReceive()这条线上得到一个NullPointerException Intent service = new Intent(context,MyAlarmOnBootService.class );
尝试在重新启动后在WakefulBroadcastReceiver中创建新意图时发生NullPointerException

java.lang.RuntimeException: Unable to start receiver com.android.myapp.receiver.MyWakefulAlarmOnBootReceiver: java.lang.NullPointerException 
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2244) 
at android.app.ActivityThread.access$1500(ActivityThread.java:138) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4854) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at android.os.Bundle.putAll(Bundle.java:303) 
at android.content.Intent.putExtras(Intent.java:5762) 
at com.android.myapp.receiver.MyWakefulAlarmOnBootReceiver.onReceive(MyWakefulAlarmOnBootReceiver.java:30) 
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2237) 
... 10 more 



这是我的接收机类:

public class MyWakefulAlarmOnBootReceiver extends 
     WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d("MyApp", "receiver started after reboot");     

     Intent service = new Intent(context, MyAlarmOnBootService.class);//this is the line where I am getting NPE. 
     service.putExtras(intent.getExtras()); 

     startWakefulService(context, service); 
    } 

} 



我的清单文件(仅在这个文件中显示相关的部分):

<?xml version="1.0" encoding="utf-8"?> 
    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="25" /> 

    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

     <receiver android:name=".receiver.MyWakefulAlarmOnBootReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

    <service 
     android:name=".service.MyAlarmOnBootService" 
     android:enabled="true" /> 
... 


这是rel三星智能管理器应用程序杀死应用程序和警报?如果是,我的接收器如何被解雇? onReceive()中的上下文参数有问题吗?请帮帮我。它在我的Nexus 5上正常工作。

+0

为什么我的问题downvoted? – shanti

回答

0

Intent service = new Intent(context,MyAlarmOnBootService.class); //这是我得到NPE的行。

实际上这不是线路。从下一行中引发的异常

service.putExtras(intent.getExtras());

您创建了没有额外功能的新意图,并将其作为参数传递给putExtra()这是您错误的地方。

+0

你有权提出异常来自service.putExtras(intent.getExtras());所以你的意思是说onReceive()的参数“intent”是null或者它的extras是空的。但是为什么Nexus 5具有这种设备特有功能呢? – shanti

+0

意图不是空的,但额外的是,我没有访问nexus 5,所以我不知道什么是在它的临时演员,如果你调试它,你可以看到它有什么额外的设置 – Farid

+0

不,我是说,无论什么额外当我在Nexus 5上运行我的应用程序时,我保存可用,但当它是三星或Verizon设备时不可用。 – shanti

相关问题