BroadcastReceiver, Сервис и Wakelock - PullRequest
       33

BroadcastReceiver, Сервис и Wakelock

4 голосов
/ 15 апреля 2011

Я получаю намерение в широковещательном приемнике, а затем я запускаю службу, чтобы сделать больше работы.что теперь, если устройство находится в спящем режиме, и это происходит, нужно ли мне устанавливать Wakelock (AlarmManger?) и зачем оно мне?мой сервис перестанет работать, если устройство перейдет в спящий режим без получения wakelock.

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

что теперь, если устройство находится в спящем режиме, и это происходит, нужно ли мне получать Wakelock (AlarmManger?) И зачем мне это нужно?

Если устройство спит дляНачнем с того, что вы не будете «получать намерение в широковещательном приемнике», потому что устройство спит.

Должен ли я получить Wakelock (AlarmManger?) и зачем он мне нужен?

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

моя служба прекратит работу, если устройстволожится спать без пробуждения.

Да.

1 голос
/ 24 августа 2016

Похоже, что Android WakefulBroadcastReceiver будет идеальным решением для вас. Нужно расширить это, а не обычный BroadcastReceiver и запустить службу в onReceive () «пробужденным» способом:

startWakefulService(context, service);

и сигнализируйте, что ваша работа выполнена в onHandleIntent () службы, вызывая

MyWakefulReceiver.completeWakefulIntent(intent);
0 голосов
/ 10 августа 2012
public class WakeLockManager extends BroadcastReceiver {

    private static WakeLock mWakeLock;
    private String LCLT;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Consts.WAKELOCK_INTENT)) {
            Log.v("wakelock", "GOT THE wakelock INTENT");
            boolean on = intent.getExtras().getBoolean("on");
            if (mWakeLock == null) {
                PowerManager pm = (PowerManager) context
                        .getSystemService(Context.POWER_SERVICE);
                mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                        "Breeze WakeLock");
            }
            if (on) {
                if (!mWakeLock.isHeld()) {
                    mWakeLock.acquire();
                    Log.v("wakelock", "acquiring wakelock");
                }
            } else {
                if (mWakeLock.isHeld()) {
                    Log.v("wakelock", "releasing wakelock");
                    mWakeLock.release();
                }
                mWakeLock = null;
            }
        }
    }
}

посмотрите на приведенный выше код ... введите его в отдельный файл класса и в своем манифесте определите его для какого-то пользовательского намерения ... теперь, когда этот класс будет реагировать на пользовательское намерение ... просто передайте это намерение и Вы можете включить или отключить функцию WakeLock во всем приложении, так как функция WakeLock статична, например:

public void setWakeup(boolean status) {
    Intent wakelock_Intent = new Intent(CUSTOM_INTENT);
    wakelock_Intent.putExtra("on", status);
    this.sendBroadcast(wakelock_Intent);
}

выше будет определено в вашем коде тревоги, поэтому он планирует вызов

...