Программно отключить телефон Android - PullRequest
35 голосов
/ 19 сентября 2010

Можно ли программно отключить телефон Android?

Второй вопрос: как заблокировать и разблокировать экран в Android?

Я использую следующий фрагмент, но он не работает для меня.

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable

и я также использовал разрешение.

Ответы [ 6 ]

33 голосов
/ 14 сентября 2012

Как CommonsWare уже сказал , что это невозможно в обычном приложении SDK. Вы должны подписать свое приложение с System Firmware Key. Но это возможно для вашего приложения с привилегиями Root. Попробуйте использовать следующий код (если у вас есть доступ SU) :

Shutdown:

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}

Перезапуск:

Тот же код, просто используйте "reboot" вместо "reboot -p".


[На другой заметке: я где-то читал, что эти команды не работают на стандартных ПЗУ HTC, но не подтвердили себя]

23 голосов
/ 19 сентября 2010

Вы не можете сделать это из обычного приложения SDK. Это могут делать только приложения, подписанные с помощью ключа подписи микропрограммы системы.

16 голосов
/ 19 сентября 2010

Вы можете использовать PowerManager для перезагрузки (это не гарантирует перезагрузки - ОС может отменить его):

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String)

Требуется разрешение REBOOT:

http://developer.android.com/reference/android/Manifest.permission.html#REBOOT

Можете ли вы также проверить свой logcat при попытке включить / отключить защиту клавиатуры и опубликовать, что там есть?

7 голосов
/ 28 апреля 2015

Гораздо лучшим решением является запуск:

su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN

Вы можете использовать Process для этого.

6 голосов
/ 12 июня 2015

Если у вас есть разрешение sigOrSystem android.permission.SHUTDOWN, вы можете поднять защищенное намерение ACTION_REQUEST_SHUTDOWN следующим образом:

Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
intent.putExtra("android.intent.extra.KEY_CONFIRM", false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Обратите внимание, что до Android 4.0 это разрешение было только подписью.

2 голосов
/ 23 апреля 2012

На самом деле, приведенные выше ответы не совсем точны, по моему опыту. Я экспериментировал со способами затемнения экрана и обнаружил, что следующее:

Window w = getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.screenBrightness =.005f;
w.setAttributes (lp);

фактически выключит мой Samsung Galaxy Tab, если вместо 0,005 я использую значение яркости экрана 0.

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

Надеюсь, я не пожалею, что поделился этой информацией .....;) Р.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...