在API => 19中以精确间隔重复警报管理器?

时间:2015-02-02 00:56:04

标签: android alarmmanager intervals

我阅读量很大,但我认为这个问题没有明确/完整的答案。

首先澄清一些事情: 这个问题不关心手机上的省电,而是更多关于精确计时的问题,我是Android的新手。

现在让我更深入地解释这个问题。我有一个报警管理器,它会在给定的时间间隔内(每2分钟)调用一次祝酒(为简单起见)manager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), interval, pendingIntent); 以上将在BroadcastReciver上调用onReceive()方法。

public class AlarmReceiver extends BroadcastReceiver  {
@Override
public void onReceive(Context context, Intent intent) {
    //Toast ....bala blah
   }}

现在这是API< 19的确切间隔但是在API => 19 setRepeating()不再是准确的了!我发现有人建议(在其他表格上)使用setExact()。但是没有关于如何在Interval中使用setExact()的示例或明确说明(或者我找不到)。据我所知,setExact()与offRepeating()不同,因此根据其他人的说法,下一个时间表需要通过onReceive()设置(再次我找不到一个例子;(。无论如何这就是我现在所处的位置)。我真的感谢任何评论或建议或链接或示例......

我希望我能够清楚地问我的问题,顺便说一句,如果还有另一种方法(在API> 19中按照精确的时间间隔运行任务,请告诉我)非常感谢

1 个答案:

答案 0 :(得分:9)

您可以使用与setExact类似的setRepeating

void scheduleAlarm(Context context) {
    AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent yourIntent = new Intent();
    //TODO configure your intent
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, yourIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
}

两个不同之处是:

  1. 时间准确(或as nearly as possible
  2. 您必须在BroadcastReceiver的onReceive中安排下一次出现。

      public class AlarmReceiver extends BroadcastReceiver  {
      @Override
      public void onReceive(Context context, Intent intent) {
        //TODO process alarm
        scheduleAlarm(context);
      }}