2014-10-07 64 views
0

我創建了一個使用警報管理器安排某些事件的BroadCastReceiver。使用待定意圖從廣播接收器中取消警報管理器

在BroadcastReceiver中,我使用以下代碼進行安排。

Intent localIntent = new Intent("com.test.sample"); 

     PendingIntent pi = PendingIntent.getBroadcast(context, 0, 
        localIntent, 0); 
      alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime() + (5 * 60 * 1000), 
        pi); 

這裏上下文來自接收器的方法的onReceive。

我想在接收其他廣播時取消此警報。 據我所知,報警可以通過alarmManager.cancel(pi);

被取消但是,如果alarmanager從任何其他活動是如何得到的PendingIntent的保持取消其設置?

感謝

+1

只是創建一個新的PendingIntent – pskink 2014-10-07 19:32:47

回答

8

你需要創建一個新的PendingIntent與同id然後把它作爲論點cancelAlarm()方法類似如下:

要創建報警

int alarmId = 0; /* Dynamically assign alarm ids for multiple alarms */ 
Intent intent = new Intent(context, AlarmReceiver.class); /* your Intent localIntent = new Intent("com.test.sample");*/ 
intent.putExtra("alarmId", alarmId); /* So we can catch the id on BroadcastReceiver */ 
PendingIntent alarmIntent; 
alarmIntent = PendingIntent.getBroadcast(context, 
     alarmId, intent, 
     PendingIntent.FLAG_CANCEL_CURRENT); 

要取消報警( in BroadcastReceiver whitin onReceive(Context context, Intent intent) method)

int alarmId = intent.getExtras().getInt("alarmId"); 
PendingIntent alarmIntent; 
alarmIntent = PendingIntent.getBroadcast(this, alarmId, 
     new Intent(this, AlarmReceiver.class), 
     PendingIntent.FLAG_CANCEL_CURRENT); 
cancelAlarm(alarmIntent); 
+0

它不是強制指定FLAG_CANCEL_CURRENT,您可以將0作爲標誌 – YTerle 2016-10-05 09:42:08

+0

如果我沒有該ID,該怎麼辦? – 2017-11-01 21:49:20