我试图在每一分钟发出警报。但由于某种原因,它并不想工作。这是一个小部件时钟应该每分钟更新。出于电池原因,我已经开启了屏幕关闭和接通的接收器。所以我的闹钟只在屏幕开启时触发。分钟应与我的系统时钟同步。
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秒之间)。
提前致谢。
答案 0 :(得分:3)
如@mighter所述,API> = 19如果您必须使用精确计时,请使用setExact() API。
if(android.os.Build.VERSION.SDK_INT < 19) {
alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
} else {
alarmManager.setExact(...);
}
答案 1 :(得分:1)
docs中有以下声明:
注意:从API 19开始,所有重复警报都不准确。如果你的 应用程序需要精确的交付时间,然后必须使用一次性 确切的警报,每次重新安排,如上所述。遗产 targetSdkVersion早于API 19的应用程序将 继续发出所有警报,包括重复警报, 确切地对待。
如果你在Android 4.4.4上运行,那么这可能就是原因。