Android 服务完成后取消报警管理器
我想取消启动服务的alarm manager,该服务是我使用以下代码创建的: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
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
或myWakefulIntentService
,而不仅仅是纯IntentService
。