2012-02-29 35 views
2

我有報警經理掛起的意圖問題。 我已經在文件讀取 確定兩個意圖是意圖分辨率(過濾)的目的是相同的。也就是說,如果他們的行動,數據,類型,等級和類別是相同的。這並不比較意圖中包含的任何額外數據。 參數如何刪除已經定義掛起的意圖

而且一套報警管理的方法將移除或替換如果已經有這個意向計劃(有兩個意圖的平等的filterEquals(意向)被定義)報警。

但是,當我實現使用相同的概念我的報警管理器將不等於過濾意圖和防止對同一數據添加到待處理的意圖。

我的代碼是

public void setalarm() { 
    int[] IDs = { 1, 2, 3 }; 
    int[] type = { 0, 1, 0 }; 
    String[] name = { "not", "yes", "not" }; 
    Date[] dt = { new Date(2012, 2, 28, 11, 51), 
      new Date(2012, 2, 29, 10, 55), new Date(2012, 2, 28, 11, 51) }; 

    for (int i = 0; i < 3; i++) { 
     AlarmManager am = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     Intent send = new Intent(context, service.class); 
     send.setAction("com.app.main"); 
     send.setData(Uri.parse(type[i] + " " + name[i] + " " + dt[i])); 
     PendingIntent pintent = PendingIntent.getService(context, IDs[i], 
       send, PendingIntent.FLAG_CANCEL_CURRENT 
         | PendingIntent.FLAG_ONE_SHOT); 
     try { 
      am.cancel(pintent); 
     } catch (Exception e) { 
     } 
     am.set(AlarmManager.RTC_WAKEUP, dt[i].getTime(), pintent); 
    } 
} 

當報警電話上啓動方法的服務,它將調用兩次從ID 1以及3. 但是我有ID使用setData相同= 1和ID = 3;

但用戶只能設置爲ID = 1不爲3,因爲第一和第三是相同

回答

4

只需重建相同的PendingIntent(具有相同的額外),並使用取消方法

如果報警創建應用程序後來重新檢索同一種 PendingIntent(相同的操作,相同的意圖操作,數據,類別, 和組件,以及相同的標誌),它將收到代表相同標記的PendingIntent (如果該標記仍然有效)因此可以調用 取消()以除去我噸。

實施例:

​​
13

重寫在CancelAlarm代碼()函數

PendingIntent pintent = PendingIntent.getService(context, IDs[i], 
       send, PendingIntent.FLAG_CANCEL_CURRENT 
         | PendingIntent.FLAG_ONE_SHOT); 

Same Intent send and Same Id IDs[i],然後取消該pintent這樣,

pintent.cancel(); 
+0

非常感謝對於你的回覆,它適用於m Ë – sneha 2012-02-29 06:32:52

+3

如果答案爲你工作,你應該注意將其標記爲正確的和接受的答案。 – MKJParekh 2013-04-01 05:09:17