0

目前我有一个可以发送通知的应用程序,我希望这个应用程序能够每 x 分钟自动发送这些通知(例如,默认值为 15 分钟)。应发送此通知时,应用程序当前可能正在运行,也可能未运行。

经过一番阅读,我确定将在这里使用 AlarmManager,但我不知道如何从中调用方法。我已经有了通知代码,我只需要每 x 分钟调用一次。

我对此很陌生,这是我的第一个练习应用程序(有 C# 经验,但在 Java 方面很少)。

谢谢,大卫。

4

3 回答 3

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); 

如果您不清楚,请阅读 教程

于 2013-05-10T15:48:36.507 回答
0

写一个IntentService。在其中,只需启动一个新的Thread. 在中Thread.run(),放置一个无限的while循环来调用您的通知代码和Thread.sleep(15 * 60 * 1000)....

于 2013-05-11T02:26:06.607 回答
0

如果您想以指定的时间间隔安排任务,请不要使用标志AlarmManager.RTCAlarmManager.RTC_WAKEUP方法alarm.setRepeating(...)。因为在这种情况下,警报将绑定到设备的实时时钟。因此更改系统时间可能会导致警报行为异常。您必须使用标志AlarmManager.ELAPSED_REALTIMEAlarmManager.ELAPSED_REALTIME_WAKEUP. 在这种情况下SystemClock.elapsedRealtime(),将作为调度警报的基础。

代码将如下所示:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent);

如果您希望在设备处于睡眠模式时执行长时间运行的任务,我建议使用 CommonsWare 的 WakefulIntentService 库:https ://github.com/commonsguy/cwac-wakeful

于 2013-05-13T19:18:52.960 回答