Android AlarmManager不断熄灭

时间:2012-09-26 09:44:44

标签: android alarmmanager

我正在使用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上不断响起。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你的取消不行。挂起的Intent必须匹配 - 因为它们有不同的上下文(MainActivity和AlarmSound),这取消不起作用。您还必须在两者上使用getService。 你可以

a)尝试重新创建匹配的待处理意图

b)获取在服务中启动服务的pendingIntent并使用它取消

但是如果你不使用setRepeating(),通常每次报警都会消失。

您确定使用stopself()正确终止服务并在onStartCommand()方法中给它正确的标志吗?