Попытка перевести Android-устройство в спящий режим, но PowerManager не содержит метода «goToSleep(long)».

Я пытаюсь перевести устройство в спящий режим и нашел ссылки все об использовании метода goToSleep(long) класса PowerManager, но я не вижу его в документации, и он не работает, когда я пытаюсь использовать его в своем коде.

документация Android не содержит метода goToSleep, который я видел.

Мой код:

 private void sleepDevice() {
    try {
        PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
        long time = 1000;
        powerMgr.goToSleep(time);
    } catch (Exception ex) {
        updateStatus("Error attempting to reboot device.");
        updateStatus(ex.getLocalizedMessage());
    }
}

Android Studio не позволяет компилировать код с сообщением «Не удается разрешить метод goToSleep (long).

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


person Pich    schedule 11.02.2015    source источник
comment
Мой вопрос: есть ли другой метод/метод, который я могу использовать, чтобы перевести Android-устройство в спящий режим? Является ли этот метод другим классом? Куда делся метод goToSleep?   -  person Pich    schedule 11.02.2015
comment
goToSleep() был удален из PowerManager на уровне API 21 (Lollipop), почему я не знаю. developer.android.com/sdk/api_diff/ предварительный просмотр-21/изменения/   -  person Philipp Reichart    schedule 11.02.2015
comment
старые документы Android (благодаря веб-архиву) также утверждают, что вам потребуется разрешение DEVICE_POWER, которое недоступно сторонним приложениям на устройствах без рута.   -  person Philipp Reichart    schedule 11.02.2015
comment
Спасибо @PhilippReichart, это было очень запутанно. Вижу ссылки на досках объявлений, но нигде в документации или API.   -  person Pich    schedule 20.03.2015


Ответы (2)


Вы можете использовать DeviceAdministrator , но вам нужно, чтобы пользователь предоставил вам эти права.

person Daniel M.    schedule 11.02.2015
comment
API-интерфейсы администрирования устройства позволяют заблокировать только устройство, насколько мне известно. Квалифицируется ли это как усыпление для нужд ОП или нет, я не знаю. - person CommonsWare; 11.02.2015
comment
@CommonsWare - да, вы правы: D, все зависит от потребностей ОП - person Daniel M.; 12.02.2015
comment
@ДаниИМ. Спасибо за помощь. На самом деле мне просто нужно, чтобы экран выключился, но я не хочу блокировать устройство. Было решено, что мы можем пока игнорировать это требование. Ближе всего к тому, чтобы заставить это работать, я установил таймер сна на ноль и позволил устройству отключить экран. Затем я возмущаюсь таймером, когда пользователь перезагружает устройство. - person Pich; 20.03.2015

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

Попробуйте этот способ и дайте обратную связь.

person Ze Luis    schedule 11.02.2015
comment
Этот ответ не имеет отношения к вопросу - person Rakesh L; 19.01.2016
comment
Это неправильный подход, вопрос в том, чтобы заснуть. - person Fredrick Gauss; 08.06.2018