我的应用程序需要非常准确的重复闹钟时间。从API 19开始,AlarmManager setRepeating现在不能节省电池(保存树木等)。
是否有任何解决方法可以让API 19的setExact方法在循环中工作?
注意:从API 19开始,所有重复警报都不准确。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述。 targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为完全警报。
答案 0 :(得分:4)
是否有任何解决方法可以让API 19的setExact方法在循环中工作?
不确定。除了执行现有工作外,让您的BroadcastReceiver
或其他任何可以从警报中获得控制权,调用setExact()
来安排下一次重复发生。
但请记住,the changes to background processing in Android M可能会给您带来困难。
答案 1 :(得分:3)
如果Google提供setExactRepeating()
方法,则可能会解决您的问题。 (这是一个笑话)
目前,您必须自行重新安排闹铃。
使用setExact()
方法首次安排闹钟,例如:
alarmManager.setExact(AlarmManager.RTC_WAKEUP,triggerAtMillis,pendingIntent);
在BroadcastReceiver的onReceiver()
重新安排闹钟,重复时间为一天(以下代码中为AlarmManager.INTERVAL_DAY
):
public void onReceive(Context context,Intent intent){
Context danielContext = MonitorApp.getContext();
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, ReceiverName.class);//put your own ReceiverName
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + AlarmManager.INTERVAL_DAY, pendingIntent);
}
当然,使用onReceiver()
方法做一些事情来实现目标。