Как я могу отменить сигнал тревоги через 10 секунд? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть проблема здесь.Я хочу установить будильник, а затем автоматически выключить его через 10 секунд.Я использовал приведенный ниже код, но он не останавливается через 10 секунд.

Вот метод setAlarm моей деятельности:

public void setAlarm(int hour, int minute) {
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    // Set the alarm to start at "hour"
    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);


    Intent i = new Intent(AccueilPA.this, MyBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(AccueilPA.this, 10, i, 0);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    new CountDownTimer(10000, 1000) {

        public void onTick(long millisUntilFinished) {
        }

        public void onFinish() {
            test = true;
        }
    }.start();
    // If the alarm has been set, cancel it.
    if (alarmManager != null && test) {
        alarmManager.cancel(pendingIntent);
    }


}

1 Ответ

0 голосов
/ 08 февраля 2019

PendingIntent необходимо создать точно так же, как и при запуске AlarmManager.Вы установили ожидающий код запроса на намерение как 10 при его создании.Вы должны использовать то же самое, чтобы отменить его.

Создать будильник:

    private void createalarm(int hour , int minute){

    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);


    Intent myIntent = new Intent(getApplicationContext(), MyReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            getApplicationContext(), 1, myIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
    Log.i("TestAlarm" , " Created Alarm");

    new CountDownTimer(10000, 1000) {

        public void onTick(long millisUntilFinished) {
        }

        public void onFinish() {
           cancelAlarm();
        }
    }.start();

}

Отменить будильник:

    private void cancelAlarm(){
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent myIntent = new Intent(getApplicationContext(), MyReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            getApplicationContext(), 1, myIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager.cancel(pendingIntent);

    Log.i("TestAlarm" , " Cancelled Alarm");
}

Класс приемника BroadCast:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Log.i("TestAlarm" , "Alarm Triggered!");
  }
}
...