2016-05-10 134 views
0

我想在我的應用程序中觸發每日鬧鐘。我可以看到每天在正確的時間觸發警報2到3天,但之後不會觸發警報。例如,如果我設置鬧鐘在上午8點觸發,則會在每天上午8點觸發2到3天,之後不會觸發鬧鐘。沒有應用程序崩潰或任何事情,它不會觸發。我有一個BroadcastReceiver註冊(在AndroidManifest.xml)這個鬧鐘,我可以看到日誌在正確的時間每天打印,但只有2或3天。之後,沒有任何活動,該應用程序似乎停滯不前。2或3天后沒有觸發每日鬧鐘

請在下面找到我的代碼:

final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
final long intervalDay = 60*60*24*1000L; 
final long alarmTime = calendar.getTimeInMillis(); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, intervalDay, pendingIntent); 

我也用alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, AlarmManager.INTERVAL_DAY, pendingIntent);但它並沒有任何區別(沒有準備它做任何雖然)。

我不想使用alarmManager.setInexactRepeating(),因爲它不會在確切的時間觸發警報,但有輕微的延遲。

任何幫助讚賞!

謝謝。

+0

http://stackoverflow.com/questions/25330826/alarmmanager-stops-working-after-a-few-days可能的重複 – Techidiot

回答

0

這是因爲android無法持續超過2-3天的警報內容。雖然我沒有確定的解決方案,但我知道。

我在每次觸發報警時都通過取消和重置報警來修復它。 就是這樣。 而不是使用setRepeat使用設置或setExact的觸發一次:

if(android.os.Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) { 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent); 
} else { 
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent); 
} 

然後在你的alarmRecieveronRecieve()方法執行你的任務後,再復位報警明年其次是取消所有待處理的意圖:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), reminderModal.get_remindID(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
alarmManager.cancel(pendingIntent); 
pendingIntent.cancel(); 

希望它有幫助。