我正在使用AlarmManager作为我的计时器。我有2节课。
在第一堂课(MainActivity)中,我开始使用下一段代码报警:
public void startAlarm(long Seconds) {
Intent myIntent = new Intent(MainActivity.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 13141337,
myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, (int) Seconds);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
pendingIntent);
}
在另一个类(AlarmSound)中,闹钟响起且手机振动,我正在调用取消闹钟方法。
public void stopAlarm(){
Intent intentstop = new Intent(AlarmSound.this, MyAlarmService.class);
PendingIntent senderstop = PendingIntent.getBroadcast(AlarmSound.this,
13141337, intentstop, 0);
AlarmManager myalarm = (AlarmManager) getSystemService(ALARM_SERVICE);
myalarm.cancel(senderstop);
Log.w("Karl","stopAlarm?");
}
这是正确的方法吗?因为我的警报在android 4.1上不断响起。
提前致谢!
答案 0 :(得分:1)
你的取消不行。挂起的Intent必须匹配 - 因为它们有不同的上下文(MainActivity和AlarmSound),这取消不起作用。您还必须在两者上使用getService。 你可以
a)尝试重新创建匹配的待处理意图
b)获取在服务中启动服务的pendingIntent并使用它取消
但是如果你不使用setRepeating(),通常每次报警都会消失。
您确定使用stopself()正确终止服务并在onStartCommand()方法中给它正确的标志吗?