2012-09-25 165 views
1

我的應用程序將同時設置多個警報。不幸的是,每個鬧鐘都使用相同的PendingIntent對象進行設置。下面是我使用的設置報警代碼:刪除AlarmManager警報僅適用於已刪除的警報

//Use AlarmManager to trigger the notification/alarm. 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

//PendingIntent to launch activity when the alarm triggers.      
Intent i = new Intent("com.testapp.DisplayNotification"); 

//Assign the reminder's primary key as the notification ID. 
i.putExtra("Reminder_Name", editRemindMeTo.getText().toString()); 
i.putExtra("Reminder_Primary_Key", reminderPrimaryKey); 

PendingIntent displayIntent = PendingIntent.getActivity(
getBaseContext(), 0, i, 0);    

//Set the alarm to trigger. 
alarmManager.set(AlarmManager.RTC_WAKEUP, 
c.getTimeInMillis(), displayIntent); 

我知道,我可以使用下面的代碼刪除報警:

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

Intent i = new Intent(context, MyPendingIntentService.class); 
PendingIntent displayIntent = PendingIntent.getService(context, 0, i, 0); 

alarmManager.cancel(displyIntent); 

但是,使用此代碼將刪除所有我報警(糾正我,如果我在這裏錯了)。有沒有辦法刪除只是用戶從數據庫中刪除的警報?在用戶刪除我應用程序數據庫中的警報條目後,應該從我的應用程序中刪除警報。我猜測,使用不同的PendingIntent名稱將是一條路,但我不知道如何爲用戶創建的每個新警報執行此操作。如何做到這一點的想法?謝謝!

回答

4

看,我在這裏遇到了同樣的問題以前...... 因此,解決辦法是通過獨特的未決意圖報警服務..所以在這裏,我怎麼可以做到

的PendingIntent pIntent =的PendingIntent。 getBroadcast(context,(int)alarm_id,intent,PendingIntent.FLAG_CANCEL_CURRENT);

這裏在等待的意圖我已經傳遞了唯一的請求ID到掛起的意圖。在取消警報時你必須記住。 因此,在我的情況下,我所做的生成唯一ID是放在數據庫中我已經檢索錶行的ID並傳遞給待定的意圖。
所以,如果你想取消你要記住與使用相同的表項的未決意向相同的請求ID特定報警...

我相信它會運行

+0

我在這裏作爲「意圖」傳遞什麼?我從應用程序中絕對不同的地方刪除警報,而不是設置它們的地方,所以我在這裏沒有任何意圖 –

2

註冊每個鬧鐘時使用不同的requestCode。這是PendingIntent.getActivity/Service()的第二個參數。

+0

嗯,我記得在某處看到AlarmManager不關心requestCode,只是使用PendingIntent來確定要刪除哪個鬧鐘......是我給了關於這個的虛假信息? – NewGradDev

+0

該文檔說'requestCode'未被使用,但實際上在比較PendingIntent時被檢查。 –

+0

Alrite,謝謝!我會試一試並回復你。 :) – NewGradDev

1

從Android文檔中,cancel()將取消具有相同pendingIntent的所有警報。所以唯一的出路是創建不同的pendingIntents。或者你也可以求助於重複報警,這樣你可以使用相同的pendingIntents。

+0

我會嘗試重複警報,但我已經在我的應用程序中使用了其他功能。你有沒有想法如何爲每個鬧鐘創建新的pendingIntents?我試圖生成一個隨機的,不重複的字符串,將其設置爲一個變量,然後將該變量設置爲pendingIntent名稱,但Java在變量引用和pendingIntent對象引用之間產生混淆。當我的警報必須經過相同的代碼行時,如何生成不同的pendingIntent名稱?再次感謝! – NewGradDev