android - 警报每秒钟都响起?
问题描述
我有一个功能可以每 15 分钟重复一次警报。
问题是它每秒都在发射。
我的主要活动中有这个:
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intentn = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentn, 0);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
if(android.os.Build.VERSION.SDK_INT>=23) {
alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,1000*900, pendingIntent);
}
else{
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
}
我在我的 AlarmReceiver onReceive() 中重复了上面相同的操作,以便在它触发后再次设置它。
有什么想法有什么问题,我该怎么做才能让它正确重复?
解决方案
首先,您正在设置闹钟而不添加当前时间。见下文:
...
alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
...
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, 1000*900, pendingIntent);
...
应该改为
...
alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time + 1000*900, pendingIntent);
...
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, time + 1000*900, pendingIntent);
...
其次,有一个功能可以完全按照我认为您在此处尝试完成的操作(设置重复警报)。见setRepeating()
。
推荐阅读
- r - RMarkdown:如何在单个块上使用钩子?
- python - 页面加载但不显示从数据库请求的内容
- javascript - 循环遍历一个对象数组,为每个对象调用一个promise并在它完成时记录
- javascript - 如何使用 react dropzone 预览 pdf
- excel - 自定义格式单元格以使用 VBA 代码添加句子
- python - 如何从不同目录中的不同文件中获取变量到 python 文件中
- recursion - 递归移动JavaFX文本标签的坐标
- javascript - innerHTML 中 Laravel 的 @if 内的 Javascript 变量
- java - 检查我们是否可以将字符串分成两半并且两半相等?
- ruby-on-rails - PG::DuplicateColumn:错误:关系“用户”的列“加密密码”已经存在