在API => 19时在Exact Interval重复报警管理器?

bas*_*i82 5 android intervals alarmmanager

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

首先澄清一些问题:这个问题与电话节省电话有关,但更多关于精确计时和我是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
   }}
Run Code Online (Sandbox Code Playgroud)

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

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

Har*_*tok 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);
}
Run Code Online (Sandbox Code Playgroud)

这两个区别是:

  1. 时间将是准确的(或尽可能接近)
  2. 您必须在onReceiveBroadcastReceiver中安排下一次出现.

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