周期性警报BroadcastReciever意向字符串额外信息未更新

时间:2018-09-16 08:42:42

标签: android broadcastreceiver alarmmanager

我有以下课程来检查我的警报是否在我安排的确切时间触发或不同。

我将从MainActivity调用BroadCast Reciever中的SetAlarm方法。连续的警报将由接收器自己设置,方法是将当前时间设置为其额外的新字符串。

警报工作正常,但问题Intent string Extras没有得到更新。无论我在setAlarm方法中设置了什么,ScheduledTime都将始终保留初始值。

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Date currentTime = new Date(); 
        String ScheduledTime = ""; 
        if (null != intent) { //Null Checking
            ScheduledTime =   intent.getStringExtra("ScheduledTime");
            //intent.removeExtra("ScheduledTime");
        }
        String message  = "Current Time" + currentTime + ",  Scheduled Time was: " + ScheduledTime ; 
        //Show Notification 

        long alarmMillis =(10*60*1000) ; //Set Alarm after 10 minutes
        Long newTimeInMillis = System.currentTimeMillis() +  alarmMillis;
        currentTime.setTime(newTimeInMillis );
        setAlarm(context, newTimeInMillis , currentTime.toString());
    }

     public void setAlarm(Context context, Long timeMillis, String ScheduledTime)
    {
        AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, AlarmReceiver.class);
        i.putExtra("ScheduledTime", ScheduledTime);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        am.setExact(AlarmManager.RTC_WAKEUP, timeMillis, pi);
    }
}

1 个答案:

答案 0 :(得分:1)

来自Android official site

  

public static final int FLAG_UPDATE_CURRENT

     

标记,表明如果所描述的PendingIntent已经存在,   然后保留它,但用此新内容替换其多余的数据   意图。与getActivity(Context,int,Intent,int)一起使用时,   getBroadcast(Context,int,Intent,int)和getService(Context,int,   Intent,int)。

     

如果要创建仅包含附加内容的意图,则可以使用此选项   更改,并且不在乎收到您以前的任何实体   即使您有新的附加功能,PendingIntent也将能够启动它,即使   他们没有明确给予它。

因此请更改您的代码

PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);

PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);