Подтвердить что ты не робот

Как отключить экран или отправить устройство в режим сна

Я хочу отправить устройство в режим сна или выключить экран. Я исследовал и нашел эту тему: Отключить экран на Android

В принципе, это три способа сделать это, но я нашел проблемы для трех:

a) Выбор 1:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
manager.goToSleep(int amountOfTime);

Проблема: Это вызывает FC. Я прочитал, что мне нужны разрешения DEVICE_POWER, но он не может быть предоставлен для обычных приложений.

b) Выбор 2:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();

Проблема: Это не работает для меня. Я не знаю почему. Это не дает мне FC, но это безобидно.

c) Выбор 3:

WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);

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

Может ли кто-нибудь сказать мне какой-либо хороший способ отправить устройство в режим сна или выключить экран, который может работать без проблем? Для меня звучит редко, что простая функциональность, подобная этой, не имеет хорошего способа ее использования (или, насколько это возможно, хорошо документирована)

4b9b3361

Ответ 1

Я отвечаю сам. Можно отключить устройство, но приложение должно реализовать функцию администратора устройства через API: Администрирование устройств

В этом API есть функция locknow(), которая делает то, что я хочу.

В любом случае, это расширение возможностей аппаратного обеспечения и защиты Android, и маловероятно, что кто-то хочет управлять этим устройством таким образом.

То, что я хотел, - это возможность блокировки устройства с помощью простого жеста. Поскольку я не хочу создавать свой собственный класс менеджера устройств, я проверяю, установлено ли свободное приложение "lockScreen" и запускает его. Это ярлык и простой способ делать то, что я хочу. Это приложение должно быть зарегистрировано как диспетчер устройств, поэтому он реализовал этот класс. Можно освободить его от рынка.

Ответ 2

Мое приложение уже делает это хорошо, я нашел это в своем PowerManager.class

 /**
 * Force the device to go to sleep. Overrides all the wake locks that are
 * held.
 * 
 * @param time is used to order this correctly with the wake lock calls. 
 *          The time  should be in the {@link SystemClock#uptimeMillis 
 *          SystemClock.uptimeMillis()} time base.
 */
public void goToSleep(long time) 
{
    try {
        mService.goToSleep(time);
    } catch (RemoteException e) {
    }
}