2013-05-10 299 views
0

目前我有一個可以發送通知的應用程序,我希望此應用程序能夠每x分鐘自動發送一次這些通知(例如,默認爲15分鐘)。發送此通知時,該應用可能正在運行,也可能不運行。每x分鐘調用一次方法

經過一番閱讀,我確定在這裏會使用AlarmManager,但我無法弄清楚如何從中調用一個方法。我已經有通知代碼,我只需要一種方法每隔x分鐘調用一次。

我對此很陌生,這是我的第一個練習應用程序(在C#中有經驗,但在Java中很少)。

謝謝大衛。

回答

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教程

+0

感謝這個,它看起來應該起作用,但是,如果我在我的MainActivity.class中有我的方法,那麼應該如何從服務中調用該方法,還是應該將它重構爲它自己的類並創建它的一個實例? – 2013-05-10 15:54:07

+0

你有沒有通過我上面鏈接的教程?有幾件事你必須做:在AndroidManifest.xml中註冊服務。實現類(上述示例中的MyService)必須擴展Service類或其一個子類。請首先閱讀教程,它包含一些示例代碼。 – 2013-05-10 16:24:36

+0

我看過這個例子,但是我仍然不完全明白如何從服務中調用我的通知方法? – 2013-05-10 16:35:50

0

IntentService。在裏面,只需開始一個新的Thread。在Thread.run(),把無限的,而如果你想在指定的時間間隔來安排你的任務不使用標誌AlarmManager.RTCAlarmManager.RTC_WAKEUP與方法alarm.setRepeating(...)循環打電話給你的通知代碼和Thread.sleep(15 * 60 * 1000) ....

0

。因爲在這種情況下,鬧鐘將被綁定到設備的實時時鐘。所以改變系統時間可能會導致警報不當。您必須使用標誌AlarmManager.ELAPSED_REALTIMEAlarmManager.ELAPSED_REALTIME_WAKEUP。在這種情況下,SystemClock.elapsedRealtime()將作爲安排警報的基礎。

的代碼如下:

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

如果要執行你的長期運行的任務時,設備在休眠模式下,我建議使用WakefulIntentService庫由CommonsWare:https://github.com/commonsguy/cwac-wakeful