Есть ли способ определить, когда устройство выходит из режима ожидания или находится в окне обслуживания? - PullRequest
0 голосов
/ 04 мая 2020

Мой вариант использования: я хочу запустить свой сервис с помощью Job Scheduler, когда устройство выходит из режима Doze. Я попробовал решение, предоставленное здесь , и во многих SO вопросах следующим образом я создал BroadcastReceiver

<receiver android:name=".receiver.DozeStatusCheckReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.os.action.DEVICE_IDLE_MODE_CHANGED" />
            </intent-filter>
</receiver> 

И ниже мой класс приемника.

package com.example.android.deviceDetail.receiver;

import android.os.PowerManager;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;


public class DozeStatusCheckReceiver extends BroadcastReceiver {


    private Context mContext;
    private PowerManager mPowerManager;
    private final String TAG = DozeStatusCheckReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {


        mContext = context;

        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        if(null != mPowerManager){

                if (mPowerManager.isDeviceIdleMode()) {
                    // the device is now in doze mode
                } else {
                    // the device is active and woke from doze mode.
                }
        }
    }
}

Но это работает, пока приложение находится на переднем плане или в остановленном состоянии. Как только приложение будет удалено из недавнего списка приложений, оно не будет работать. Я выполнил шаги, описанные в документации по тестированию режима ожидания . Также я попытался зарегистрировать приемник, используя контекст приложения.

Также я обнаружил, что Android O приемник фоновой широковещательной рассылки не работает, за исключением немногих, как объяснено здесь . Так есть ли способ контролировать состояние устройства, является ли IDLE или нет? независимо от Android версии ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...