2017-03-08 68 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

相關問題