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

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

Только проблема в том, как автоматически остановить фоновую службу через 2 часа.

Есть ли какие-либо предложения или решения........

КОД, КОТОРЫЙ Я ИСПОЛЬЗОВАЛ ДЛЯ ЗАПУСКА БУДИЛЬНИКА,

ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebtn);
    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                if (selectedupdate != null) {
                    System.out.println(selectedupdate);
                    if (selectedupdate.equals("20 Minutes")) {
                        updateInterval = (1 * (60000));
                    } else if (selectedupdate.equals("30 Minutes")) {
                        updateInterval = (2 * (60000));
                    } else if (selectedupdate.equals("60 Minutes")) {
                        updateInterval = (60 * (60000));
                    } else if (selectedupdate.equals("90 Minutes")) {
                        updateInterval = (90 * (60000));
                    } else if (selectedupdate.equals("120 Minutes")) {
                        updateInterval = (120 * (60000));
                    }

                    viewgps.setBackgroundColor(Color.parseColor("#008000"));
                    Toast.makeText(getApplicationContext(),
                            "Location Updates Activate", Toast.LENGTH_SHORT)
                            .show();
                    Calendar calendar = Calendar.getInstance();
                    Intent myIntent = new Intent(PersonalGpsScreen.this,
                            MyBroadcastReceiver.class);
                    pendingIntent = PendingIntent.getBroadcast(
                            PersonalGpsScreen.this, 0, myIntent, 0);


                    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                            calendar.getTimeInMillis(), updateInterval,
                            pendingIntent);
                } else if (selectdeactivate != null) {
                    System.out.println(selectdeactivate);
                    if (selectdeactivate.equals("6 Hours")) {
                        deactivateinterval = (3 * (60000));
                    } else if (selectdeactivate.equals("12 Hours")) {
                        deactivateinterval = (12 * (60000) * (60));
                    } else if (selectdeactivate.equals("24 Hours")) {
                        deactivateinterval = (24 * (60000) * (60));
                    } else if (selectdeactivate.equals("48 Hours")) {
                        deactivateinterval = (48 * (60000) * (60));
                    }

                    cancelAlarm();



                }

            } else {
                viewgps.setBackgroundColor(Color.parseColor("#ff0000"));
                Toast.makeText(getApplicationContext(),
                        "Location update deactivated", Toast.LENGTH_SHORT)
                        .show();
                Intent myIntent = new Intent(PersonalGpsScreen.this,
                        MyBroadcastReceiver.class);
                PendingIntent sender = PendingIntent.getBroadcast(
                        PersonalGpsScreen.this, 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

                alarmManager.cancel(sender);
                // stopService(new Intent(getApplicationContext(),
                // MyAlarmService.class));

                Intent stopServiceIntent = new Intent(getBaseContext(),
                        LocationService.class);
                getBaseContext().stopService(stopServiceIntent);

            }
        }
    });

UpdateInterval — это время, выбранное пользователем с помощью счетчика, для тестирования я упомянул 20 минут = 1 минута, а deactivateinterval — это время, когда фоновая служба останавливается, оно снова выбирается пользователем.


person user8910    schedule 09.06.2014    source источник


Ответы (1)


PendingIntent.FLAG_Cancel_CURRENT==> Установите этот флаг как ожидающее намерение ==> *Он должен иметь тот же идентификатор, который вы использовали для установки будильника==>alarmManager.cancel(pendingUpdateIntent);

void cancelAlarm()
{
Intent myIntent = new Intent(PersonalGpsScreen.this, MyBroadcastReceiver.class);
//The params for below (Context,ID,Intent,Flag)-- This ID is what needs to be same for //seting and removing the alarm. You can keep it static 0 as you have used, if you do not //have multiple alarms in your app.
pendingIntent = PendingIntent.getBroadcast(PersonalGpsScreen.this, 0, myIntent, PendingIntent.FLAG_Cancel_CURRENT);
AlarmManager  alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
person Parth Kapoor    schedule 09.06.2014
comment
Привет, сэр, спасибо за ваш ответ, я немного запутался, поэтому я обновляю свой вопрос и помещаю код, как я запускаю свой будильник ... не могли бы вы предоставить мне какой-либо пример или пример кода ... я новичок в разработке Android ... Еще раз спасибо - person user8910; 09.06.2014
comment
Спасибо, сэр, но я снова застрял, поэтому я обновляю полный код того, что на самом деле пытаюсь сделать, не могли бы вы указать, что я делаю неправильно. У меня есть два счетчика, которые работают при нажатии кнопки переключения, фоновые службы работают отлично, а также останавливаются, когда кнопка переключения выключена, но она не останавливается автоматически в соответствии с временем деактивации. пожалуйста, дайте мне предложение в соответствии с обновленным вопросом. пожалуйста - person user8910; 09.06.2014