Не удается перезагрузить устройство с помощью runtime.exec - PullRequest
2 голосов
/ 09 апреля 2011

По некоторым причинам я не могу перезагрузить устройства Android с помощью Runtime.getRuntime (). Exec ("/ system / bin / reboot") ;. Я попробовал следующий код на 3 устройствах сейчас без удачи. Один был построен из источника гребной лодки-Android. Двумя другими являются Motorola Droid Pro (Rooted, сток) и HTC Ledgent (Rooted, Cynogen Mod). Все устройства работают под управлением Android 2.2 Froyo.

Кто-нибудь знает почему? su работает так же, как приложение Super User. Я должен отметить, что работают различные другие команды оболочки, такие как netcfg (chmod 'to 777) и ls.

public static boolean executeCommand(SHELL_CMD iShellCmd){
        String cmd = null;
        String line = null;
        String fullResponse = null;
        Process lPs = null;

        Log.d(Global.TAG,"--> !!!!! Running shell command");

        if (iShellCmd == SHELL_CMD.restart_device){
            cmd = "reboot";
        }

        Log.d(Global.TAG,"--> About to exec: " + cmd);

        try {
            lPs = Runtime.getRuntime().exec("su");
            lPs = Runtime.getRuntime().exec("/system/bin/reboot");
        } catch (Exception e) {
            e.printStackTrace();
        }

        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(lPs.getOutputStream()));
        BufferedReader in = new BufferedReader(new InputStreamReader(lPs.getInputStream()));

        try {
            while ((line = in.readLine()) != null) {
                Log.d(Global.TAG,"--> Command result line: " + line);
                if (fullResponse == null){
                    fullResponse = line;
                }else{
                    fullResponse = fullResponse + "\n" + line;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        Log.d(Global.TAG,"--> Full response was: " + fullResponse);

        return true;
    }

Ответы [ 5 ]

2 голосов
/ 05 февраля 2013

В зависимости от того, как вы получили разрешение root на вашем устройстве, вы можете выполнить любое из следующих действий:

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

или

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

или

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

Вероятно, лучше протестировать все три сценария в вашем приложении.

1 голос
/ 24 апреля 2011

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

Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});
0 голосов
/ 07 ноября 2011

вместо {"/system/bin/su","-c","reboot"} я изменил часть "/system/bin/su" на "su", и тогда это сработало для меня.

Как это Runtime.getRuntime().exec(new String[]{"su","-c","reboot"});

0 голосов
/ 08 мая 2011

Если вы хотите, чтобы кнопка была нажата, попробуйте:

final Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Perform action on click
             try {
                 Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot"});              
            } catch (IOException e) {
            }               
        }
    });

Кстати, чтобы этот код работал, кнопка должна называться button1.

0 голосов
/ 11 апреля 2011

Попробуйте запустить "su / system / bin / reboot" вместо su и команду в разных строках. Это может помочь:)

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