向广播接收器发送新意图会提供先前意图的额外值

om2*_*345 6 android broadcastreceiver alarmmanager android-intent

我正在广播将由广播接收器接收的意图,因为应用程序仍在运行并且警报服务触发新意图但接收器正在显示先前的意图值.根据docs广播接收器在返回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);
Run Code Online (Sandbox Code Playgroud)

这是广角接收者:

@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();
                }
Run Code Online (Sandbox Code Playgroud)

这里的吐司显示即使从警报服务发出第二次意图时第一次通过警报服务发送的id(第二次警报响起)

om2*_*345 6

得到答案,必须设置标志PendingIntent.FLAG_CANCEL_CURRENT,同时为AlarmService设置待定意图...