6

アプリケーションがまだ実行されており、新しいインテントがアラーム サービスによって起動されているため、ブロードキャスト レシーバーによって受信されるインテントをブロードキャストしていますが、レシーバーは以前のインテント値を表示しています。ドキュメントによると、ブロードキャスト レシーバーは 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 回目のアラームが鳴ります)。

4

1 に答える 1

8

回答を得ました。AlarmService の保留中のインテントを設定する際に、フラグ PendingIntent.FLAG_CANCEL_CURRENT を設定する必要があります...

于 2011-01-29T12:59:21.250 に答える