這可能是一個重複的問題,但我仍然面臨着這個問題,希望有一個解決方案。提前致謝。如何每15分鐘運行一次android功能,特別是每天15分鐘的標記?
如何設置鬧鐘管理器運行,以便每隔15分鐘的時間間隔(例如每天8:00,8:15,8:30,8:45,9:00)專門執行該功能不管應用程序啓動的時間如何。
舉一個例子,假設我在7:47開始了我的應用程序主要活動,並且我希望鬧鐘在8:00開始,隨後是8:15,8:30等。 。我應該怎麼做?我真的很感激,如果任何提出了建議..
這可能是一個重複的問題,但我仍然面臨着這個問題,希望有一個解決方案。提前致謝。如何每15分鐘運行一次android功能,特別是每天15分鐘的標記?
如何設置鬧鐘管理器運行,以便每隔15分鐘的時間間隔(例如每天8:00,8:15,8:30,8:45,9:00)專門執行該功能不管應用程序啓動的時間如何。
舉一個例子,假設我在7:47開始了我的應用程序主要活動,並且我希望鬧鐘在8:00開始,隨後是8:15,8:30等。 。我應該怎麼做?我真的很感激,如果任何提出了建議..
你應該設置兩路報警管理r.通過計算剩餘時間到適當的時間(例如上午8:00),設置第一個觸發時間。之後你應該在第一個鬧鐘管理器內創建另一個鬧鐘管理器,每15分鐘觸發一次。
的計算時間設定第一警報管理器使用波紋管代碼:
Calendar c = Calendar.getInstance();
int m = calendar.get(Calendar.MINUTE);
long start = System.currentTimeMillis();
int remain=0;
if (m<15)
{
remain = 15-m;
}
else if (m<30)
{
remain = 30-m;
}
else if (m<45)
{
remain = 45-m;
}
else
{
remain = 60-m;
}
remain=start + remain*60*1000// convert it to milisecond and plus it to current time;
編輯
之後,你可以使用代碼波紋管設置第一報警經理:
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, FirstReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP,remain, pi);
所以現在在你的FirstReceiver類中做類似下面的事情:
public class FirstReceiver extends BroadcastReceiver
{
//do what ever you want + code bellow to setup second alarm manager
Intent intent = new Intent(this, SecAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am= (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(),
15*60*60,pendingIntent);
}
最好設置一個鬧鐘要與一個天間隔
public void setAlarm(Context context) {
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, yourTimeInMilisecond, 24 * 60 * 60 * 1000, pi); // Millisec * Second * Minute
}
這裏yourTimeInMillisecond
每次都是要設置鬧鐘,就像如果時間你要爲明天上午9時報警,那麼,這將是:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.add(Calendar.DAY_OF_YEAR, 1);
long yourTimeInMilisecond = calendar.getTimeInMillis();
希望它會爲你工作:)
感謝您的建議,但是,沒有特定的時間來設置鬧鐘,我想在我的活動開始時執行該功能...所以如果我的活動在7:47開始,它仍然不是15分鐘的標記然而,我只希望在8:00銳利時執行該函數。 – XXX
@Neo使用'DateUtils.DAY_IN_MILLIS'將會更清潔,而不是自己計算以毫秒爲單位的時間。 –
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (time limits), pendingIntent);
一些解釋會很好。 –
沒有任何解釋代碼的功能,或者提出這種方法的任何理由,這個答案是沒有用的。接下來會發生的是,該人員將複製並粘貼代碼並遇到問題,因爲您沒有提供任何解釋。但這是你的第一個答案,所以請看[讓你的答案很棒的一些技巧](http://stackoverflow.com/help/how-to-answer)。 – ishmaelMakitla
我認爲你需要設置兩個報警管理器而不是一個。 – pooyan
在Android 6.0及更高版本上這是不切實際的。打盹模式將阻止對時間的精確控制,除非用戶將您的應用添加到電池優化白名單。我強烈建議你設計你的應用程序,以避免需要做任何後臺工作,更不用說這種精確度。 – CommonsWare
@CommonsWare,感謝您的評論,理解這對於Android平臺的更高版本來說是不切實際的,但是我目前正在使用運行在Android 2.3上的專有設備,其中設備將依賴於電源模式,因此該應用將在頂級24×7因此需要有這麼繁瑣的工作,你對這種情況有什麼建議嗎? – XXX