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?");
}

これはこれを行う正しい方法ですか?私のアラームはAndroid4.1で常に鳴るからです。

前もって感謝します!

4

1 に答える 1

1

キャンセルは機能しません。保留中のインテントは一致する必要があります-コンテキスト(MainActivityとAlarmSound)が異なるため、このキャンセルは機能しません。両方でgetServiceも使用する必要があります。あなたはできる

a)一致する保留中のインテントを再作成してみてください

b)サービスでサービスを開始したpendingIntentを取得し、それを使用してキャンセルします

ただし、setRepeating()を使用しない場合、通常、すべてのアラームは1回だけオフになります。

stopself()を使用してサービスを正しく終了し、onStartCommand()メソッドで正しいフラグを指定していることを確認しますか?

于 2012-09-26T09:55:00.517 に答える