2015-05-09 46 views
-1

這是我第一篇文章。我已經搜索了這個話題,但似乎沒有任何幫助。當下面的代碼得到執行時,警報仍然熄滅,當它不應該..意味着我不能取消警報,使我的應用程序對API低於21是無用的。任何想法爲什麼?請幫忙!我應該提到,當我使用來自Android Studio的API22模擬器(nexus one)嘗試此代碼時,它可以工作,但是當我使用genymotion中的API18模擬器(samsung s3)時,它不會。AlarmManager取消()不起作用

Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 8, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 
am.cancel(pendingIntent); 
+0

經過進一步測試後,使用不同的仿真器,它對API 17,16,19也是如此。仍然可以在API 22上工作。任何解決方法? – Ownage

+0

你真的在調用'set()'後立即調用'cancel()'嗎? –

+0

你有任何廣播接收機嗎? –

回答

0

看起來你只是不給set()足夠的時間來設定鬧鐘你打電話之前cancel()

將電話撥打cancel()在一個單獨的代碼塊中,以便在set()之後不會立即調用它,它應該可以工作。