2015-04-02 87 views
1

我有這樣一個BroadcastReceiver:爲什麼在調試時intent.getExtras()。mMap爲空?

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println(Arrays.toString(intent.getExtras().keySet().toArray())); 

    } 
} 

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.angryyogurt.yotransfer"> 

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

    <receiver android:name=".NewIncomingReceiver"> 
     <intent-filter> 
      <action 
       android:name="android.provider.Telephony.SMS_RECEIVED" 
       android:priority="1010"/> 
      <action 
       android:name="android.intent.action.NEW_OUTGOING_CALL" 
       android:priority="1010"/> 
      <action 
       android:name="android.intent.action.PHONE_STATE" 
       android:priority="1010"/> 
     </intent-filter> 
    </receiver> 

</application> 

</manifest> 

我用它來聽的短信。當我嘗試將消息發送到此手機時,它會打印密鑰集[format, pdus, slot, phone, subscription]

但是,當我調試它並設置斷點System.out.println...,我看到intent.mExtras.mMap爲空。爲什麼是這樣?在調試過程中如何在意圖中檢查地圖的項目?

+0

張貼您的宣言請 – 2015-04-02 08:16:41

+0

@DavidJhons我在上面添加了AndroidManifest.xml文件。 – AngryYogurt 2015-04-02 08:23:22

回答

2

實例變量mMap僅在extras被解組(unharshalled,unarceled,deserialized)後才被填充。如果你沒有做任何事情導致額外被解組,那麼mMap將是null

試試這個:

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     boolean b = intent.hasExtra("blah"); 
     System.out.println(Arrays.toString(
       intent.getExtras().keySet().toArray())); 
    } 
} 

調用hasExtra()將迫使額外Bundle進行解組。在System.out.println()上設置斷點,您應該在mMap中看到附加信息。

相關問題