1

次のような 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>

これを使ってSMSを聞いています。この電話にメッセージを送信しようとすると、 key set が出力され[format, pdus, slot, phone, subscription]ます。

しかし、デバッグしてブレークポイントを に設定すると、 nullSystem.out.println...であることがわかります。intent.mExtras.mMapどうしてこれなの?デバッグ中に意図的にマップのアイテムをチェックする方法は?

4

1 に答える 1

4

インスタンス変数mMapは、エクストラがアンマーシャリング (アンパーセル、デシリアライズ) された後にのみ設定されます。エクストラを非整列化するために何もしていない場合は、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ます。

于 2015-04-02T13:45:18.637 に答える