我试图在每一分钟都发出警报。但由于某种原因它不想工作。它用于小部件时钟,每分钟更新一次。出于电池原因,我制作了一个用于屏幕关闭和打开的接收器。所以我的闹钟只有在屏幕打开时才会触发。分钟应该与我的系统时钟同步。
public static void startClockTickAlarm() {
AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 1);
calendar.add(Calendar.HOUR, 1);
alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
}
public static final long utcMillisNextMin() {
Time t = new Time();
t.setToNow();
t.second = 0;
t.minute++;
System.out.println("Next Alarm: " + t.hour + ":" + t.minute + ":" + t.second);
return t.normalize(true);
}
我的 System.out 给了我它应该有的东西。例如,我在 11:30:15 启用小部件,返回结果是 11:31:00 - 这意味着我的闹钟应该首先在 11:31 触发。根据我的系统时钟,闹钟晚了 5-15 秒。警报过晚触发的秒数并不总是相同(5 到 15 秒之间)。
提前致谢。
最佳答案
喜欢@mighter表示,API >= 19 如果必须使用精确计时,请使用 setExact() API。
if(android.os.Build.VERSION.SDK_INT < 19) {
alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
} else {
alarmManager.setExact(...);
}
关于android - Alarmmanager - 每分钟发生火灾警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303165/