Android 服务完成后取消报警管理器

Android 服务完成后取消报警管理器,android,android-intent,service,android-pendingintent,Android,Android Intent,Service,Android Pendingintent,我想取消启动服务的alarm manager,该服务是我使用以下代码创建的: Intent intent = new Intent(getActivity(), CheckStatusService.class); pintent = PendingIntent.getService(getActivity(), 0, intent, 0); cal.add (Calendar.MINUTE,1); alarm = (AlarmManager)getActivity().getSystemSe

我想取消启动服务的alarm manager,该服务是我使用以下代码创建的:

Intent intent = new Intent(getActivity(), CheckStatusService.class);
pintent =  PendingIntent.getService(getActivity(), 0, intent, 0);
cal.add (Calendar.MINUTE,1);
alarm = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);

alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*1000, pintent); 
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), CheckStatusService.class);
PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
alarmManager.cancel(pintent);
我在做什么

alarm.cancel(pintent)
它没有抛出任何错误,但我开始使用这个Alarmmanager的服务仍然可以继续工作

服务完成后,它会向我的一项活动发送广播。在那里,它最终被接收,甚至调用了alarm.cancel(),但服务仍在继续运行


我做错了什么?

我通过使用以下代码取消服务中的警报来解决问题:

Intent intent = new Intent(getActivity(), CheckStatusService.class);
pintent =  PendingIntent.getService(getActivity(), 0, intent, 0);
cal.add (Calendar.MINUTE,1);
alarm = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);

alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*1000, pintent); 
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), CheckStatusService.class);
PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
alarmManager.cancel(pintent);

使用adb shell dumpsys alarm查看您的报警是否仍在计划中。另外,您确定为
cancel()
调用创建的
pendingent
与为
setRepeating()
调用创建的类型相同吗?我问,因为你没有显示你在哪里为
cancel()
@commonware创建
pIntent
,谢谢你的回复!取消报警时,我没有重新创建pIntent,但我使用的是最初创建的pIntent(它是活动中的一个全局变量)。我知道该服务仍在运行,因为onhandleIntent仍然被调用(使用Log.e(标记、消息))。“我在取消报警时没有重新创建pIntent,但我使用的是最初创建的pIntent(它是活动中的一个全局变量)”--那么
pIntent
可以是
null
,如果进程在应用程序运行之间终止。除此之外,请使用adb shell dumpsys alarm确认此报警是导致调用
onHandleIntent()
的原因,而不是以前开发中未取消的其他报警。此外,如果要使用
\u WAKEUP
警报,请使用
WakefulBroadcastReceiver
或my
WakefulIntentService
,而不仅仅是纯
IntentService