我正在嘗試使用AlarmManager爲通知設置警報。當用戶選擇一個列表項目時設置警報,所以我試圖每次都設置一個單獨的警報(使用傳遞給pendingIntent的唯一ID)選擇一個列表項目。setExact方法調用被跳過。警報未按預期方式被觸發
用於設置報警代碼:
public static void setAlarm(Context context, Movie movie, Schedule schedule){
Intent arg = new Intent(context, NotifyService.class);
arg.putExtra(NotificationHelper.fetch_schedule_id, schedule.getId());
arg.putExtra(NotificationHelper.fetch_movie_id, movie.getId());
PendingIntent pendingIntent = PendingIntent.getService(context.getApplicationContext(), (int) schedule.getId(), arg, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
am.setExact(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent);
else
am.set(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent);
}
的問題我負責的是呼叫設置(或setExact)方法沒有在時間執行。它的工作一半的時間,但在特定的情況下,像,當用戶點擊兩個或多個列表項,一個後在不到一秒鐘的另一個,那麼只有第一次調用執行和調用剩下的只是忽略。
另外,由於set/setexact方法返回void如果調用方法並設置了警報,則無法調試。現在我必須每次檢查adb shell dumpsys報警。
所以,如果有人能告訴我如何安排的警報,使得每次觸發,無論多麼頻繁調用該方法,甚至指導我在正確的方向,這將會是一個很大的幫助。 :)
其實這個問題不是特定設備。我已經在很多設備上測試過該應用,但仍然面臨着這個錯誤。而對於我描述的用例來說,警報根本不會觸發。 –
好吧,也許你有一個不同的錯誤,雖然你會面對我描述的錯誤。另外,你可以附加更多的代碼; – Vasilisfoo