2

我正在为我的计时器使用 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 上不断响起。

提前致谢!

4

1 回答 1

1

您的取消将不起作用。待处理的 Intent 必须匹配 - 因为它们具有不同的上下文(MainActivity 和 AlarmSound),所以取消将不起作用。您还必须在两者上都使用 getService 。你可以

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

b)在Service中获取启动Service的pendingIntent并用它来取消

但是如果你不使用 setRepeating(),通常每个警报只会响一次。

您确定您使用 stopself() 正确终止了您的服务并在 onStartCommand() 方法中为其提供了正确的标志吗?

于 2012-09-26T09:55:00.517 回答