Как выключить экран или отправить устройство в спящий режим - PullRequest
12 голосов
/ 09 декабря 2011

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

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

а) Вариант 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();

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

в) Выбор 3:

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

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

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

Ответы [ 2 ]

7 голосов
/ 12 декабря 2011

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

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

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

То, что я хотел, это возможность блокировкиустройство от простого жеста.Поскольку я не хочу создавать свой собственный класс диспетчера устройств, я проверяю, установлено ли бесплатное приложение «LockScreen», и запускаю его.Это быстрый и простой способ сделать то, что я хочу.Это приложение должно быть зарегистрировано в качестве диспетчера устройств, чтобы он реализовал этот класс.Его можно получить бесплатно с рынка.

0 голосов
/ 01 июня 2014

Мое приложение уже делает это хорошо, я нашел это в моем 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) {
    }
}
...