目前我有一個可以發送通知的應用程序,我希望此應用程序能夠每x分鐘自動發送一次這些通知(例如,默認爲15分鐘)。發送此通知時,該應用可能正在運行,也可能不運行。每x分鐘調用一次方法
經過一番閱讀,我確定在這裏會使用AlarmManager,但我無法弄清楚如何從中調用一個方法。我已經有通知代碼,我只需要一種方法每隔x分鐘調用一次。
我對此很陌生,這是我的第一個練習應用程序(在C#中有經驗,但在Java中很少)。
謝謝大衛。
目前我有一個可以發送通知的應用程序,我希望此應用程序能夠每x分鐘自動發送一次這些通知(例如,默認爲15分鐘)。發送此通知時,該應用可能正在運行,也可能不運行。每x分鐘調用一次方法
經過一番閱讀,我確定在這裏會使用AlarmManager,但我無法弄清楚如何從中調用一個方法。我已經有通知代碼,我只需要一種方法每隔x分鐘調用一次。
我對此很陌生,這是我的第一個練習應用程序(在C#中有經驗,但在Java中很少)。
謝謝大衛。
你可能要考慮這樣的事情:
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教程
寫IntentService
。在裏面,只需開始一個新的Thread
。在Thread.run()
,把無限的,而如果你想在指定的時間間隔來安排你的任務不使用標誌AlarmManager.RTC
和AlarmManager.RTC_WAKEUP
與方法alarm.setRepeating(...)
循環打電話給你的通知代碼和Thread.sleep(15 * 60 * 1000)
....
。因爲在這種情況下,鬧鐘將被綁定到設備的實時時鐘。所以改變系統時間可能會導致警報不當。您必須使用標誌AlarmManager.ELAPSED_REALTIME
或AlarmManager.ELAPSED_REALTIME_WAKEUP
。在這種情況下,SystemClock.elapsedRealtime()
將作爲安排警報的基礎。
的代碼如下:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent);
如果要執行你的長期運行的任務時,設備在休眠模式下,我建議使用WakefulIntentService庫由CommonsWare:https://github.com/commonsguy/cwac-wakeful
感謝這個,它看起來應該起作用,但是,如果我在我的MainActivity.class中有我的方法,那麼應該如何從服務中調用該方法,還是應該將它重構爲它自己的類並創建它的一個實例? – 2013-05-10 15:54:07
你有沒有通過我上面鏈接的教程?有幾件事你必須做:在AndroidManifest.xml中註冊服務。實現類(上述示例中的MyService)必須擴展Service類或其一個子類。請首先閱讀教程,它包含一些示例代碼。 – 2013-05-10 16:24:36
我看過這個例子,但是我仍然不完全明白如何從服務中調用我的通知方法? – 2013-05-10 16:35:50