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

Программное отключение телефона Android

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

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

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

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable

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

4b9b3361

Ответ 1

Возможно, вы можете использовать PowerManager для его перезагрузки (это не гарантирует перезагрузки операционной системы, OS может отменить его):

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

Для этого требуется разрешение REBOOT:

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

Можете ли вы также проверить свой логарифм при попытке включить/отключить блокировку клавиатуры и опубликовать что там?

Ответ 2

Как CommonsWare уже сказал, что это невозможно в Ordinary SDK Application. Вам нужно подписать приложение с помощью 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();
}

Restart:

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


[С другой стороны: я где-то читал, что эти команды не работают на Stock HTC ROMs, но не подтвердили себя]

Ответ 3

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

Ответ 4

Гораздо лучшее решение - запустить:

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

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

Ответ 5

Если у вас есть разрешение 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 это разрешение было только сигнатурой.

Ответ 6

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

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

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

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

Ответ 7

Мое устройство укоренено так, что я использовал ниже код, и он отлично работает, если ваше устройство внедрено, вы можете использовать подход ниже

Выключение устройства

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

Перезапустить устройство

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

Ответ 8

Вы не можете, но можно показать диалоговое окно выключения/перезагрузки без рута, только включите ваше приложение в меню специальных возможностейù. См. fooobar.com/info/12805302/...