我试图取消pendingIntent,所以总是只有一个。我的requestCode是" 1"或" 2"取决于服务是启动还是停止。启动警报的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必须完全相同才能被取消,requestCode为1应满足该需要。这可能实际上按预期工作,但是警报重新触发多天的日志文件显示以下两个启动/停止警报(每个警报发生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}
我在日志中看到的是已经激活的警报的历史记录还是没有被取消的警报?
答案 0 :(得分:1)
您的原始PendingIntent
看起来有ACTION =“start”或ACTION =“stop”。在您发布的代码中,PendingIntent
不包含操作。在这种情况下,它将不匹配(因此它不会取消警报)。
为了使PendingIntent
匹配,必须匹配以下内容:ACTION,DATA,COMPONENT。不会比较意图附加内容,因为匹配目的会忽略它们。