API 19及更高版本中AlarmManager setRepeating的替代方案?

时间:2015-06-24 23:08:03

标签: android alarmmanager alarm repeat

我的应用程序需要非常准确的重复闹钟时间。从API 19开始,AlarmManager setRepeating现在不能节省电池(保存树木等)。

是否有任何解决方法可以让API 19的setExact方法在循环中工作?

  

注意:从API 19开始,所有重复警报都不准确。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述。 targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为完全警报。

2 个答案:

答案 0 :(得分:4)

  

是否有任何解决方法可以让API 19的setExact方法在循环中工作?

不确定。除了执行现有工作外,让您的BroadcastReceiver或其他任何可以从警报中获得控制权,调用setExact()来安排下一次重复发生。

但请记住,the changes to background processing in Android M可能会给您带来困难。

答案 1 :(得分:3)

如果Google提供setExactRepeating()方法,则可能会解决您的问题。 (这是一个笑话)

目前,您必须自行重新安排闹铃。

  1. 使用setExact()方法首次安排闹钟,例如:

    alarmManager.setExact(AlarmManager.RTC_WAKEUP,triggerAtMillis,pendingIntent);

  2. 在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);
    

    }

  3. 当然,使用onReceiver()方法做一些事情来实现目标。