Я создаю приложение, которое будет работать, когда устройство заблокировано, через Activity#setShowWhenLocked(true)
.Я не хочу запрещать устройству переходить в состояние пониженного энергопотребления.Я знаю, что система делает это с Always-On Display
, и дисплей имеет соответствующий режим питания для этого:
/ frameworks / base / core / java / android / view / Display.java
286 /**
287 * Display state: The display is dozing in a low power state; it is still
288 * on but is optimized for showing system-provided content while the
289 * device is non-interactive.
290 *
291 * @see #getState
292 * @see android.os.PowerManager#isInteractive
293 */
294 public static final int STATE_DOZE = ViewProtoEnums.DISPLAY_STATE_DOZE; // 3
295
296 /**
297 * Display state: The display is dozing in a suspended low power state; it is still
298 * on but the CPU is not updating it. This may be used in one of two ways: to show
299 * static system-provided content while the device is non-interactive, or to allow
300 * a "Sidekick" compute resource to update the display. For this reason, the
301 * CPU must not control the display in this mode.
302 *
303 * @see #getState
304 * @see android.os.PowerManager#isInteractive
305 */
306 public static final int STATE_DOZE_SUSPEND = ViewProtoEnums.DISPLAY_STATE_DOZE_SUSPEND; // 4
Этот раздел также есть в / frameworks / base / core / java / android / os / PowerManagerInternal.java :
51 * Wakefulness: The device is dozing. It is almost asleep but is allowing a special
52 * low-power "doze" dream to run which keeps the display on but lets the application
53 * processor be suspended. It can be awoken by a call to wakeUp() which ends the dream.
54 * The device fully goes to sleep if the dream cannot be started or ends on its own.
55 */
56 public static final int WAKEFULNESS_DOZING = 3;
Если возможноЯ бы хотел избегать использования root для этого, но если все остальное не удалось, я мог бы вручную управлять дозой с помощью root с помощью этих команд , но это звучит грязно, и я не хочуиспортить дремлющие взаимодействия с любым другим приложением.
Кроме того, меня особенно беспокоит Android Pie (9.0)
Обновление:
Iтакже пытался получить DOZE_WAKE_LOCK
, но для этого требуется разрешение системы DEVICE_POWER
.Я попытался adb shell pm grant
разрешить доступ к своему приложению, но это не изменяемый тип разрешения.