2014-09-24 54 views
1

我试图取消一个pendingIntent,所以总是只有一个。根据服务是开始还是停止,我的requestCode是“1”或“2”。该对的PendingIntent启动报警看起来像这样(停止几乎是相同的):用独特的ReqestCode取消PendingIntent

Intent i = new Intent(context, Service.class); 
i.setAction("start"); 
PendingIntent pi = PendingIntent.getService(context, SaveSchedulePrefs.getStartReqCode(context), i, PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pi) 

新的PendingIntent看起来是这样的:

alarmManager.setExact(AlarmManager.RTC_WAKEUP, mTime, pi); 

从我读过的的PendingIntent必须是完全相同以便被取消并且1的requestCode应该满足该需求。这实际上可能是因为预期工作,但是从警报再次触发多天的日志文件显示以下两个启动/停止报警(各7个出现次数):

RTC_WAKEUP #0: Alarm{b216a768 type 0 com.myapp.myRinger} 
operation=PendingIntent{b2169318: PendingIntentRecord{b20e5820 com.myapp.myRinger startService}} 
    RTC_WAKEUP #0: Alarm{b2172ed0 type 0 com.myapp.myRinger} 
operation=PendingIntent{b2172ec0: PendingIntentRecord{b20e6160 com.myapp.myRinger startService}} 
    com.myapp.myRinger +856ms running, 14 wakeups: 
+759ms 7 wakes 7 alarms: act=stop cmp={com.myapp.myRinger/com.myapp.myRinger.Service} 
+758ms 7 wakes 7 alarms: act=start cmp={com.myapp.myRinger/com.myapp.myRinger.Service} 

是我所看到的记录已经被激活的报警的历史记录,或者没有一个报警被取消?

回答

1

它看起来像您的原始PendingIntent已得到ACTION =“开始”或ACTION =“停止”。在您发布的代码中,PendingIntent不包含行动。在这种情况下,它不会匹配(所以它不会取消警报)。

为了使PendingIntent匹配,以下内容必须匹配:ACTION,DATA,COMPONENT。出于匹配目的,不会比较意图附加项并将其忽略。

+0

我已将以下setAction方法添加到上面:'i.setAction(“start”);',但我仍然看到相同的日志结果。所以现在我有一个匹配的请求代码和匹配的操作。难道是我看到的日志输出是正常的,报警实际上被取消了吗? – Futureproof 2014-10-01 18:08:33

+0

如果您不确定警报是否关闭,请在警报关闭时向文件中添加一些调试日志记录。那么你就会确定,你不必依靠做出假设。 – 2014-10-01 18:54:29