目前我有一个可以发送通知的应用程序,我希望这个应用程序能够每隔x分钟自动发送这些通知(例如,默认为15分钟)。当应该发送此通知时,应用程序当前可能正在运行。
经过一些阅读,我已经确定会在这里使用AlarmManager,但我无法弄清楚如何从中调用一个方法。我已经有了通知代码,我只需要一个方法来每x分钟调用一次。
我对此非常陌生,这是我的第一个练习应用程序(具有C#经验,但在Java方面很少)。
谢谢大卫。
答案 0 :(得分:3)
你可能想要考虑这样的事情:
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// Start every 30 seconds
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
如果您不清楚,请浏览this教程
答案 1 :(得分:0)
写一个IntentService
。在其中,只需开始一个新的Thread
。在Thread.run()
中,设置无限循环来调用您的通知代码和Thread.sleep(15 * 60 * 1000)
....
答案 2 :(得分:0)
如果要按指定的时间间隔安排任务,请不要使用方法AlarmManager.RTC
的标记AlarmManager.RTC_WAKEUP
和alarm.setRepeating(...)
。因为在这种情况下,警报将受限于设备的实时时钟。因此,更改系统时间可能会导致警报错误。您必须使用标记AlarmManager.ELAPSED_REALTIME
或AlarmManager.ELAPSED_REALTIME_WAKEUP
。在这种情况下,SystemClock.elapsedRealtime()
将作为安排警报的基础。
代码如下:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent);
如果您希望在处于睡眠模式的设备执行长时间运行的任务时,我建议使用CommonsWare的WakefulIntentService库:https://github.com/commonsguy/cwac-wakeful