为什么调试时 intent.getExtras().mMap 为空?
Why intent.getExtras().mMap is null when I debug?
我有一个这样的 BroadCastReceiver:
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>
我用这个来听短信。当我尝试向此 phone 发送消息时,它会打印密钥集 [format, pdus, slot, phone, subscription]
。
但是当我调试它并将断点设置在 System.out.println...
时,我发现 intent.mExtras.mMap
为空。为什么是这样?调试时如何查看intent中的地图项?
实例变量 mMap
仅在 extras 被解组(unparceled,反序列化)后填充。如果您没有做任何事情来解组额外内容,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
.
中看到额外内容
我有一个这样的 BroadCastReceiver:
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>
我用这个来听短信。当我尝试向此 phone 发送消息时,它会打印密钥集 [format, pdus, slot, phone, subscription]
。
但是当我调试它并将断点设置在 System.out.println...
时,我发现 intent.mExtras.mMap
为空。为什么是这样?调试时如何查看intent中的地图项?
实例变量 mMap
仅在 extras 被解组(unparceled,反序列化)后填充。如果您没有做任何事情来解组额外内容,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
.