Мой вариант использования: я хочу запустить свой сервис с помощью 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 версии ОС.