PendingIntent
経由で次のような追加データを送信しようとしています。
_MyMessage message;
//...
Intent intent;
SmsManager sms = SmsManager.getDefault();
intent = new Intent(Constants.SENT_PLAIN);
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); //putting long id (not -1L)
PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent, 0);
intent = new Intent(Constants.DELIVERED_PLAIN);
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId());
PendingIntent deliveredPI = PendingIntent.getBroadcast(activity, 0, intent, 0);
sms.sendTextMessage(phoneNumber, null, message.getBody(), sentPI, deliveredPI);
_
次に、Broadcast
でデータをキャッチしようとしています:
_@Override
public void onReceive(Context context, Intent intent) {
String message, prefix = "";
String action = intent.getAction();
long id = intent.getLongExtra(Constants.EXTRA_RAW_ID, -1L); //here I receive id=-1
// blah-blah....
}
_
Broadcast
onReceive()
が呼び出されたことがわかります-これは、Broadcast
が適切な方法で登録されていることを意味しますが、それでもエキストラは空です。
何か案は?
保留中のインテントで使用しているインテントにデータをエクストラとして配置します。このインテントは、onReceive
レシーバーのBroadCast
メソッドで取得します。保留中のインテントを次のように定義してみてください。
PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
で述べたように 保留中の意図 :
この動作のため、PendingIntentを取得するために、2つのインテントが同じであると見なされるタイミングを知ることが重要です。よくある間違いは、「余分な」コンテンツのみが異なるインテントを使用して複数のPendingIntentオブジェクトを作成し、毎回異なるPendingIntentを取得することを期待することです。これは発生しませんは発生しません。マッチングに使用されるインテントの部分は、 _
Intent.filterEquals
_ で定義されているものと同じです。 _Intent.filterEquals
_ のように同等の2つのIntentオブジェクトを使用すると、両方で同じPendingIntentを取得します。これに対処する2つの典型的な方法があります。
複数の異なるPendingIntentオブジェクトを同時にアクティブにする必要がある場合(両方が同時に表示される2つの通知として使用する場合など)、それらを異なるものに関連付けるには、それらについて異なるものがあることを確認する必要があります。保留中のインテント。これは、 _
Intent.filterEquals
_ によって考慮されるIntent属性のいずれか、またはgetActivity(Context, int, Intent, int)
、getActivities(Context, int, Intent\[\], int)
、getBroadcast(Context, int, Intent, int)
、またはgetService(Context, int, Intent, int)
。使用するインテントのいずれかに対して一度に1つのPendingIntentのみをアクティブにする必要がある場合は、代わりにフラグ _
FLAG_CANCEL_CURRENT
_ または _FLAG_UPDATE_CURRENT
_ を使用できます。 =指定しているインテントに関連付けられている現在のPendingIntentをキャンセルまたは変更します。