8

アラームがアクティブかどうかを確認しようとしています。alarmIsSetメソッドは、アラームが設定される前はfalseを返し、アラームが設定されている場合はtrueを返します。これまでのところ良好ですが、アラームをキャンセルした後、デバイスを再起動するまで、alarmIsSetはtrueを返し続けます。これを修正するにはどうすればよいですか?

public class Alarm extends Activity {
    private Intent intent = new Intent("PROPOSE_A_TOAST");

    private void alarm (boolean activate) {
        AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);

        if(activate == true) {
            int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
            long interval = 3000;
            long triggerTime = SystemClock.elapsedRealtime();       
            am.setRepeating(type, triggerTime, interval, pi);       
        } else {
            am.cancel(pi);
        }
    }

    private boolean alarmIsSet() {
        return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_NO_CREATE) != null;
    }
}
4

3 に答える 3

14

追加するだけです

pi.cancel();

am.cancel(pi);
于 2011-03-27T20:53:57.910 に答える
1

このようなことで頭を悩ませた後、テスト中に保留中のインテントを作成した場合、実際にはテスト間でクリアされないことがわかりました。アプリを終了しても効果がありませんでした。インテントはシステム内にとどまり、チェック時に true を返し続けました。テストが正しく行われる前に、それを強制終了するコードを実際に書く必要がありました。

于 2013-05-12T07:45:52.620 に答える
0

最も簡単な方法は、アラーム変数の (日付と) 時刻の値を確認することです。アラームが設定されていない場合と同じ値でない場合 (それが何であるかを一度確認するため)、アラームを示します。がアクティブであり、プログラムでのチェック時に、経過してアラームが鳴ったか、またはまだ到着していなくてアラームがまだ鳴っていないか消えていないかのいずれかです。ルールでは、再起動前または電源オフ前、または 12 時間または 24 時間ごとに、デバイス セッションごとに 1 つのアラームのアクティブ化のみが許可される場合があるため、ステータスがクリアされない可能性があることに注意してください。

于 2011-01-17T16:00:10.217 に答える