Сервисные паузы при блокировке экрана - PullRequest
1 голос
/ 16 февраля 2012

Для тестирования я сделал услугу, которая подает звуковой сигнал каждую 1 минуту.(Пока нет клиент-серверного интерфейса).Он звучит нормально, когда экран включен, но когда он переходит в режим сна, звуковой сигнал прекращается.

Я создаю приложение, которое должно периодически запрашивать у сервера что-то.

Для этого,Я пытаюсь создать службу, которая будет постоянно работать в фоновом режиме, опрашивать сервер каждые 1 минуту, а затем на основе ответа от сервера будет генерировать уведомление панели задач.

У меня есть тестовое действиес двумя кнопками, 1 для запуска и другой для остановки службы.И один класс обслуживания с именем S_PS_PollService

setOnClickListener кнопки «Начать активность» содержит:

Thread pollServiceThread = new Thread() {
  public void run() {
    startService(new Intent(MM_MainMenu.this,
    S_PS_PollService.class));
  }
};

pollServiceThread.start();

Кнопка «Остановить активность» просто имеет:

stopService(new Intent(MM_MainMenu.this, S_PS_PollService.class));

Следующийявляются методами из класса S_PS_PollService:

public void onCreate() {
 pollSound = MediaPlayer.create(this, R.raw.chirp);
 alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
 Intent myIntent = new Intent(this, S_PS_PollService.class);
 pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
 // for wake lock
 pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag")
 // for calendar
 calendar = Calendar.getInstance();
}

Onstart:

public void onStart(Intent intent, int startId) {
 super.onStart(intent, startId);

 wl.acquire();

 pollSound.start();

 calendar.setTimeInMillis(System.currentTimeMillis());
 calendar.add(Calendar.MILLISECOND, 60000);
 alarmManager.set(AlarmManager.RTC_WAKEUP,
 calendar.getTimeInMillis(), pendingIntent);

 wl.release();
}

Всякий раз, когда срабатывает сигнал тревоги, вызывается метод onStart (), выдающий звуковой сигнал и устанавливающий новый сигнал тревоги.Но он работает только при включенном экране.

Я пытался набрать https://github.com/commonsguy/cwac-wakeful, но не получил его.Относительно новичок в Android ...

Пожалуйста, помогите мне, я очень отчаялся :) Спасибо,!

Ответы [ 3 ]

0 голосов
/ 07 марта 2012

Вы хотите получить частичную блокировку пробуждения (оставить работающий ЦП при каждом переходе в режим сна на устройстве) в соответствии с вашим кодом.

Проблема в том, что вы, по-видимому, переопределены при старте освобождения блокировки пробуждения. Вы хотите выпустить свой wakeLock в onDestroy .. после завершения работы службы.

0 голосов
/ 30 марта 2012

Это, наконец, сработало для меня.Загрузите CWAC-WakefulIntentService.jar из https://github.com/commonsguy/cwac-wakeful

, добавьте класс в ваш проект

import com.commonsware.cwac.wakeful.WakefulIntentService;

public class WakeService extends WakefulIntentService {

    public WakeService(String name) {

        super(name);

    }
    @Override
    protected void doWakefulWork(Intent intent) {
    }
}

, теперь добавьте следующую строку в ваш код, где бы вы ни захотели повторить цикл и пробудитьустройство вверх

WakefulIntentService.sendWakefulWork(this, S_WS_WakeService.class);

0 голосов
/ 17 февраля 2012

Вы должны использовать AlarmManager, здесь много сообщений о stackoverflow.

...