как остановить службу будильника через 2 дня в определенное время?

Ниже приведен мой код для установки повторного будильника на каждый день. Теперь мне нужно остановить мой будильник через 2 дня. Я попытался остановить будильник после добавления 2 дней, но он не работает. Пожалуйста, помогите мне.

Intent myIntent = new Intent(this, MyAlarmService.class);

    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hour1);
    calendar.set(Calendar.MINUTE, min1);
    calendar.set(Calendar.SECOND, 0);   

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent);

    Toast.makeText(this, "Start Daily Alarm", Toast.LENGTH_LONG).show(); 

     //trying to cancel after 2 days
    // add days to current date using Calendar.add method 

    calendar.add(Calendar.DATE, 2);       
    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0);
    AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManagerstop.cancel(pendingIntent);     

person sachi    schedule 13.09.2011    source источник
comment
У вас есть решение?   -  person Nik    schedule 07.03.2018


Ответы (1)


здесь вы передаете системное время в миллисекундах во втором параметре.

PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0);

так как во втором параметре был передан код запроса, поэтому вам нужно сделать что-то вроде этого.

private static int REQUEST = 1;

вы должны сохранить этот код запроса для каждого установленного вами будильника. Обратите внимание, что если вы передадите этот код запроса с тем же значением, он переопределит ваш сигнал тревоги. поэтому вы должны передать уникальный код запроса.

Для остановки будильника требовался тот же код запроса, чтобы найти этот объект PendingIntent и перейти к методу alarm.cancel следующим образом.

private static int REQUEST = 1;
PendingIntent.getService(this, REQUEST, myIntent, 0);
AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManagerstop.cancel(pendingIntent); 

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

person Pratik    schedule 13.09.2011
comment
извините не попал. я попытался использовать запрос для второго аргумента в alarmmanagerstop. но это не работает, также мне нужно перестать звонить через 2 дня автоматически. - person sachi; 13.09.2011