Использование вейклока Android

Я проверяю данные о местоположении каждые 5 минут. У меня это реализовано в службе, которая вызывается каждые пять минут. В основной деятельности у меня есть две кнопки для запуска/остановки будильника. Это лучшее место для реализации блокировки.

 startService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            // add a notification when the BG service is started..

            Intent myIntent = new Intent(ContextActivity.this, MyAlarmService.class);
            pendingIntent = PendingIntent.getService(ContextActivity.this, 0, myIntent, 0);

                        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

                        Calendar calendar = Calendar.getInstance();
                        calendar.setTimeInMillis(System.currentTimeMillis());
                        calendar.add(Calendar.SECOND, 10);
                       // alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 5, pendingIntent);

               Toast.makeText(ContextActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
               System.out.println("Alarm started");
        }

    });

    stopService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
               alarmManager.cancel(pendingIntent);

                        // Tell the user about what we did.
                        Toast.makeText(ContextActivity.this, "Cancel!", Toast.LENGTH_LONG).show();
                        System.out.println("Stop alarm");
        }
    });

Можно ли получить блокировку в начале и снять блокировку в остановке?


person user340    schedule 19.08.2012    source источник


Ответы (1)


Вам не нужен wakelock для этого.

Вы уже используете alarmManager.setRepeating(AlarmManager.RTC_WAKEUP..., который, как указано в документах:

Время будильника в System.currentTimeMillis() (время настенных часов в формате UTC), которое разбудит устройство, когда оно отключится.

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

person FoamyGuy    schedule 19.08.2012
comment
Да, это выглядит так... однако я не давал разрешения на блокировку пробуждения, это нормально? - person user340; 19.08.2012
comment
Да, вам это не нужно, потому что хотя AlarmManager использует флаг пробуждения, технически вы не получаете себе wakelock. Я думаю, вы должны быть готовы идти с тем, что у вас есть сейчас. - person FoamyGuy; 19.08.2012