のドキュメントにPendingIntent
はPendingIntent.getBroadcast()
、requestCode
パラメータは「現在使用されていません」と記載されています。ただし、かなり徹底的なテストを行ったところ、さまざまなrequestCode
s を設定すると、プログラムの動作が明らかに変わります (また、さまざまなrequestCode
s を設定することは、アラームのインテントを区別するための一般的に受け入れられているアプローチのようです)。
非常に明確に使用されているという事実は、requestCode
「修正」されるリスクがあるバグですか? または、PendingIntents を区別するために使用し続けることはできますか?
背景:
onCreate
メイン アクティビティで次のコードを使用してテスト アプリをセットアップします。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("text", "text one");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 1);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("text", "text two");
pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 10);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
}
非常に単純な AlarmReceiver と同様に:
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.getStringExtra("text"), Toast.LENGTH_SHORT).show();
}
}
次に、PendingIntents にさまざまなフラグと requestCodes を設定して実験しました。結果は次のとおりです。
https://docs.google.com/spreadsheet/ccc?key=0AnqelXkzmAL0dDNYeVEyekJyRkV1VDZNVVIyQTJkdmc#gid=0