我有一项服务,使用PendinIntent
和AlarmManager
在固定的时间段后启动另一项活动。
以下是该服务的相关代码:
Calendar cal = Calendar.getInstance(); //Create a calendar
cal.add(Calendar.MINUTE, 1); //Add the set minutes to the alarm
Intent dialogIntent = new Intent(this, alarmRingLayout.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1234, dialogIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
当服务启动时,我还设置了一个通知,其中包含一个可以取消服务的按钮,但用户不希望该活动启动。
点击“取消”按钮,会调用stopService()
:
stopService(new Intent(StopPowerNapAlarmService.this, PowerNapAlarmService.class));
onDestroy()
有以下代码取消通知并调用stopSelf()
它还尝试取消PendingIntent
和AlarmManager
。
问题是即使在调用onDestroy
之后,活动也会打开。我相信PendingIntent
和/或AlarmManager
不会被取消。
以下是onDestroy()
的代码:
@Override
public void onDestroy() {
Toast.makeText(this, "Alarm Finished", Toast.LENGTH_SHORT).show();
CancelNotification(this, 0);
//Cancel the pending intent and AlarmManager
Intent myntent = new Intent(PowerNapAlarmService.this, PowerNapAlarmService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,
1234, myntent, PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntent.cancel();
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
stopSelf();
}
这里出了什么问题?
答案 0 :(得分:2)
这里出了什么问题?
您的Intent
个对象不同,因此您的PendingIntent
个对象不同。反过来,这意味着您正在处理不同的警报。第一个Intent
指向alarmRingLayout.class
个活动。第二个Intent
指向一个奇怪名为BroadcastReceiver
的{{1}}。
如果您想要PowerNapAlarmService
cancel()
警报,请为alarmRingLayout
创建一个PendingIntent
活动,并将其与alarmRingLayout
一起使用。
另外,请在cancel()
中删除stopSelf()
,因为这不是必需的,可能会导致问题。