Runtime.exec (): перезагрузка в Android?

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

Я заметил, что перезагрузка телефона намного быстрее, чем перезагрузка в терминале (например, adb shell или ConnectBot), чем обычная перезагрузка с помощью ACTION_REBOOT , которую я не могу использовать в любом случае.

На данный момент я могу получить привилегии суперпользователя, с

 Process root = Runtime.getRuntime().exec("su"); 

Но я не могу выполнить фактическую перезагрузку. Я стараюсь использовать G1 (HTC) и Galaxy S (Samsung) без каких-либо успехов. Я нашел исполняемый файл reboot в /system/bin/reboot

Вот некоторые из моих попыток:

 Process reboot = Runtime.getRuntime().exec("/system/bin/reboot"); Process reboot = Runtime.getRuntime().exec("reboot"); Process reboot = Runtime.getRuntime().exec("su reboot"); 

Я прочитал эту статью о подводных камнях Runtime.exec (), но я думаю, что я не в этом случае.

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

Можете ли вы помочь мне в этом вопросе?

Благодарю.

перезагрузка работает отлично в android. вы, вероятно, не выполняете runtime.exec () правильно. вам необходимо обработать

  public static void rebootSU() { Runtime runtime = Runtime.getRuntime(); Process proc = null; OutputStreamWriter osw = null; StringBuilder sbstdOut = new StringBuilder(); StringBuilder sbstdErr = new StringBuilder(); String command="/system/bin/reboot"; try { // Run Script proc = runtime.exec("su"); osw = new OutputStreamWriter(proc.getOutputStream()); osw.write(command); osw.flush(); osw.close(); } catch (IOException ex) { ex.printStackTrace(); } finally { if (osw != null) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } } try { if (proc != null) proc.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } sbstdOut.append(ReadBufferedReader(new InputStreamReader(proc .getInputStream()))); sbstdErr.append(ReadBufferedReader(new InputStreamReader(proc .getErrorStream()))); if (proc.exitValue() != 0) { } } 

Наконец, после нескольких недель поиска:

 Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"}); 

Я нахожу, что не могу выполнить перезагрузку программно.

Кроме того, я могу открыть окно терминала на своем телефоне Android с помощью приложения Terminal Emulator, введите su, чтобы получить приглашение # для доступа root, а затем введите «#reboot», и я получаю ответ «не разрешен!».

Какие-либо предложения?

Хорошо, никогда не подумал, я понял это. На телефонах HTC команда перезагрузки не работает даже с правами доступа SU root. Необходимо вызвать BUSYBOX для выполнения команды перезагрузки.

Этот код работает на Samsung Galaxy S2, S4, Sony Xperia S (LTi 26)

 public static void rebootDevice() { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("reboot \n"); } catch (Throwable t) {t.printStackTrace;} } 

После долгой борьбы я нашел рабочее решение.

Если в вашей системе используется serial port, выполните команду ниже,

 Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"}); 

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

 Runtime.getRuntime().exec(new String[]{"/system/xbin/su","-c","reboot now"}); 

разница только /bin и /xbin

так что код может выглядеть так, как если бы первое исключение команды throw, а затем выполнить второе.

  • Android: CountDownTimer пропускает последний onTick ()!
  • Чтение и отображение данных из TXT-файла
  • Перезапустите службу, даже если приложение отключено и продолжает работать в фоновом режиме даже после закрытия приложения How?
  • Android написать в папку sd card
  • Что делает оператор «+ =» в Java?
  • Удалить дубликаты из ArrayLists
  • Неподдерживаемая версия major.minor 52.0 в моем приложении
  • Лучший способ реализовать View.OnClickListener в android
  • Завершить все предыдущие действия
  • Использование serviceloader на android
  • Проверка, является ли строка пустой или пустой в Java
  • Interesting Posts

    Как сделать горизонтальный ListView в Android?

    Очень большой ответ SOAP – ошибка при выходе из памяти Android

    Кросс-компиляция OpenSSH для ARM

    плавать до неожиданного поведения

    Управление сложными файлами Web.Config между средами развертывания

    Facebook Graph API – как получить пользовательскую страну?

    Является ли null объектом?

    Есть ли альтернатива для гибких / бизонов, которые можно использовать в 8-битных встроенных системах?

    Java Object.hashCode () – адрес или случайный ()?

    Как быстро включить и отключить Aero в Windows 7?

    Алгоритм для поиска чисел из списка размера n sum на другое число

    Как имитировать параллельный (LPT) принтер с USB-принтером?

    Как записать файлы на внешнее общедоступное хранилище на Android, чтобы они были видны из Windows?

    Инструмент, который полностью блокирует доступ в Интернет для Windows?

    Python install ставит все файлы / библиотеки в каталог c: root (Windows 7 64-bit)

    Давайте будем гением компьютера.