2012-06-12 36 views
1

在我的主要活動中,我有一個setRepeatingAlarm()方法來設置應用第一次加載時的鬧鈴。該方法通過循環遍歷列成功設置警報,並從SQLite表中的每一行獲取一個整數值。這裏是在基本的方法:我無法取消Android中的鬧鈴/ PendingIntents

for (int i : AlarmDays) { 


     Calendar cal = Calendar.getInstance(); 
     if (cal.get(Calendar.MINUTE) >= i) 
      cal.add(Calendar.HOUR, 1); 
     cal.set(Calendar.MINUTE, i); 

     Intent intent = new Intent(ManageDebts.this, TimeAlarm.class); 
     pendingIntent = PendingIntent.getBroadcast(this, i, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
       60 * 60 * 1000, pendingIntent); 
    } 

之後,該方法結束,然後它通過行循環每一次使各成CustomAdapter(列表),以顯示數據。這裏是主類在我的onCreate上下文(同樣,在基礎):

datasource = new DebtDataSource(this); 
    datasource.open(); 

    **am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    setRepeatingAlarm();** 

    values = datasource.getAllDebt(); 
    adapter = new MyArrayAdapter(this, values); 
    setListAdapter(adapter); 

我想用戶或者長按行,它會刪除的項目,或有一個按鈕來刪除所有行。一切正常,但我無法讓警報消失。

我明白如何做到這一點(通過設置相同的額外的相同pendingIntent取消方法),但我的企圖已被挫敗!我不知道在哪裏放?以上所有內容均在相同類中。

無論用戶是否刪除一行或全部,我認爲最簡單的方法就是刪除所有警報並再次通過該方法循環重置它們。任何人都可以幫忙,並告訴我在哪裏把這個取消代碼?

回答

5

在列表中長按

PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0); 
am.cancel(pi); 

UNIQUE_ID是單獨爲每個未決的意圖,從而得到ListView的ID,加+1因此,這將是你的意圖正在申請ID。

這樣,特定的PendingIntent將被刪除。

要取消所有警報只需設置警報並取消它們即可進行for循環。