2017-04-18 127 views
2

我正在开发一个小部件应用程序,我必须在每一分钟内执行一些任务。所以,我正在使用AlarmManager来实现这一点。但无论我设定的间隔时间如何,它每5秒重复一次。Android闹钟管理器在5秒后重复并忽略间隔时间

我使用AlarmManager这样的:提前

final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarm.cancel(pendingIntent); 
     long interval = 60000; 
     alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent); 

感谢。

回答

3

AlarmManager.ELAPSED_REALTIME用于从系统启动时间起触发报警。而AlarmManager.RTC使用UTC时间。

alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), interval, pendingIntent); 

这将启动系统启动并且重复在指定的时间间隔后运行

alarm.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), interval, pendingIntent); 

这将启动从现在运行,并在指定的时间间隔重复。

为了解决这个问题,我建议使用AlarmManager.RTC。如果您想在1分钟后开始报警,然后重复,然后通过第二PARAM这样的:

calendar.getTimeInMillis() + interval 

还检查了机器人documentationanswer在报警更多的解释。

+0

感谢您的帮助。为第二参数(即triggerAtMillis)添加间隔为我工作。 – rajesh

+0

@rajesh很高兴帮助你。如果有帮助,请将回答标记为已接受;) –

+0

只需添加;),AlarmManager.RTC,此警报不唤醒设备;如果它在设备睡着的时候熄灭,它将不会在设备下一次唤醒之前交付。 – dhams

0

尝试此 alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 60000, 的PendingIntent);

+0

试过这个,但它没有工作,仍然面临同样的问题。 – rajesh

0

在我的设备(Nexus5 CM13),它能够很好地利用 下面的代码工作:

private void doWork() { 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, SecondActivity.class), 0); 
     final AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarm.cancel(pendingIntent); 
     long interval = 60000; 
     alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
      interval, pendingIntent); 
    } 

所以我不知道它清楚了,你可以试试“setRepeating”进行测试。

+0

我使用API​​级别为23的MotoG3。我尝试使用两者(即setRepeating()和setInexactRepeating()),但我面临同样的问题。由FAIAA给出的答案为我工作。感谢您的尝试。 – rajesh

相关问题