2016-12-10 3 views
-1

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

Runtime.getRuntime().exec("su -c reboot"); 

Я уже добавил разрешение REBOOT в манифесте android

Но если я выполню этот код внутри оболочки ADB, мое устройство перезагрузится.

Вот мой код:

public void reboot() { 
    Process rebootProcess = null; 
    try 
    { 
     rebootProcess = Runtime.getRuntime().exec("su -c reboot"); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
     return; 
    } 

    // We waitFor only if we've got the process. 
    if (rebootProcess != null) 
    { 
     try 
     { 
      int result = rebootProcess.waitFor(); 
      Log.i("result", "" + result); 
     } 
     catch (InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

UPDATE

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

+2

https://stackoverflow.com/questions/5603221/cant-reboot-device-using-runtime-exec?rq=1 возможно –

+0

Различные настройки переменной PATH может укусить вас при работе в приложениях разница/пользователей. Вы можете использовать команду «which», чтобы найти полные пути к «su» и «reboot» в вашей системе, а затем включить их в свой код Java. На Debian у меня есть «/ bin/su» и «/ sbin/reboot», но вы можете ожидать разные для Android. –

+0

su и перезагрузка находятся в/system/bin. Попробовал добавить путь к команде в моем коде. Он по-прежнему не работает –

ответ

0

Посмотрите на мой git repo, возьмите файл rebootLib, так как это все, что вам нужно, и посмотрите на образец, если у вас возникнут проблемы.

Разрешение на перезагрузку может использоваться только системными приложениями (подписанными с системным ключом), для этого также потребуется андроид: sharedUserId = "android.uid.system" в вашем манифесте. Ваше разрешение никогда не вызывается вашим приложением и не требуется, поскольку вы используете root.

Repo Link