アプリケーションがまだ実行されており、新しいインテントがアラーム サービスによって起動されているため、ブロードキャスト レシーバーによって受信されるインテントをブロードキャストしていますが、レシーバーは以前のインテント値を表示しています。ドキュメントによると、ブロードキャスト レシーバーは onReceive() を返した後にアクティブではなくなるため、レシーバーはアラーム サービスによって起動される次のインテント値を表示する必要がありますが、それは起こっていません。正しいアプローチを伝えることができます。
これは、アクティビティからブロードキャスト インテントまでです。
Intent intent = new Intent(SCH_ALARM_ACTION);
intent.setClass(getBaseContext(), SchAlarmReciever.class);
intent.putExtra("id", maxId);
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(),
0,
intent,
0);
alarmManager.set(AlarmManager.RTC, gc.getTimeInMillis(), pi);
これはブロードレシーバーです:
@Override
public void onReceive(Context context, Intent data)
{
// TODO Auto-generated method stub
if(data.getAction().equals(SchedulerActivity.SCH_ALARM_ACTION)){
int id = data.getIntExtra("id",0);
Toast.makeText(context, "in receiver "+String.valueOf(id), Toast.LENGTH_LONG).show();
}
ここで、トーストは、alarmservice から 2 番目のインテントが発生した場合でも、alarmservice からの最初のブロードキャストによって送信された ID を示します (2 回目のアラームが鳴ります)。