我有一个闹钟应用程序,具有可同时设置每日闹钟(小时和分钟)的功能。
因此,我计划每小时重复一次事件,以确保下一天的闹钟在这一天正常工作。
COLUMN_NAME DATA_PRECISION DATA_SCALE
------------------------------ -------------- ----------
COLUMN_1 8 3
在BootBroadcastReceiver类中,我触发一个JobIntentService来确保下一个警报将起作用,并且我已经测试了它在大多数设备上都能正常工作的逻辑。
这是我在JobIntentService内部设置实际警报的部分。
AlarmManager alarmMgr;
PendingIntent alarmIntent;
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, BootBroadcastReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 9998, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
Calendar.getInstance().getTimeInMillis() + 5000,
AlarmManager.INTERVAL_HOUR, alarmIntent);
} else {
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
Calendar.getInstance().getTimeInMillis() + 5000,
AlarmManager.INTERVAL_HOUR, alarmIntent);
}
但是,已安装我的应用程序的设备之一在预定的时间没有响起警报,这是在将我的应用程序安装在此设备上3周后发生的!
所以我有3个问题:
1-我的整体逻辑是处理日常警报的最佳方法,还是有更好的方法?
2-报告警报未响铃问题的设备是android kitkat(v4.4),我的代码在kitkat版本中是否存在缺陷?
3-您知道重新启动设备时,即使不是您计划的时间,也会触发Alarmmanger设置的广播接收器,为避免在错误的时间触发警报,请检查当前时间和分钟,然后将其与警报管理器触发的广播接收器类中的警报的缓存值进行比较。
那么广播不能在准确的分钟内触发吗?这就是为什么我检查会议记录的逻辑拒绝警报的原因?
例如,如果我将闹钟设置为12:30,广播会在12:29或12:31触发吗?
然后我检查当前分钟和小时,我发现当前分钟是29或31,而不是30,所以闹铃不起作用?
这是我在广播接收器内的支票:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, milliSeconds, alarmIntent);
} else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, milliSeconds, alarmIntent);
} else {
alarmMgr.set(AlarmManager.RTC_WAKEUP, milliSeconds, alarmIntent);
}