重复报警BroadcastReciever Intent字符串附加功能没有得到更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重复报警BroadcastReciever Intent字符串附加功能没有得到更新相关的知识,希望对你有一定的参考价值。

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

我将从MainActivity中调用BroadCast接收器中的Set Alarm方法。连续报警将由接收器本身设置,方法是将当前时间设置为新的字符串。

警报工作正常,除了问题Intent字符串额外没有得到更新。无论我在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);
    }
}
答案

来自Android official site

public static final int FLAG_UPDATE_CURRENT

指示如果所描述的PendingIntent已存在的标志,则保留它,但将其额外数据替换为此新Intent中的内容。用于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);

以上是关于重复报警BroadcastReciever Intent字符串附加功能没有得到更新的主要内容,如果未能解决你的问题,请参考以下文章

BroadcastReciever 不工作或 AlarmManager 未设置

报警管理器每日重复单词不正确

zabbix 设置一定时间内重复发送报警

安卓。报警管理器。重复警报不会触发,并且在一段时间后会立即触发所有警报

C# Winform 程序 使用电脑自带的喇叭,输出报警声?

如何在android中的固定时间自动启动应用程序?