Estoy buscando una solución que puede ser utilizado para reiniciar un dispositivo de raíces. Yo jknow que reiniciar un dispositivo es muy pobre diseño para el usuario, como se indica aquí, y realmente no es para una aplicación. El propósito principal es para reiniciar el teléfono durante mis pruebas (yo trabajo en un chat de vídeo de la aplicación, y a veces tengo que reiniciar cuando todo va hacia el sur)

He observado que reiniciar un teléfono es mucho, mucho más rápido el uso de reinicio en un terminal (adb shell o ConnectBot, por ejemplo) que va a través de la costumbre de reiniciar con el ACTION_REBOOT, que no se pueden utilizar de todos modos.

Por el momento, soy capaz de obtener los privilegios de superusuario, con

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

Pero no puedo hacer el real reinicio. Yo intente en un G1 (HTC) y en un Galaxy S (Samsung) sin ningún éxito. He localizado el reinicio ejecutable en /system/bin/reboot

Aquí están algunos de mis intentos :

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

He leído este artículo acerca de los errores de tiempo de ejecución.exec(), pero creo que no estoy en este caso.

Como el uso de ConnectBot me permitirá hacer una acción de ese tipo, estoy bastante seguro de que es posible. Por favor, no me diga para ir y echar un vistazo a la ConnectBot código, es un gran y complicado proyecto 🙂

Me pueden ayudar con este problema ?

Gracias.

Ya he respondido a esto un par de meses atrás: stackoverflow.com/questions/4580254/… , stackoverflow.com/questions/3456467/…
Después de esta pregunta, he hecho una pequeña aplicación que me de código abierto: github.com/rbochet/Fast-Forward-Reboot

OriginalEl autor Rob | 2011-03-30

5 Comentarios

  1. 15

    reinicio funciona bien en android. usted probablemente no están realizando en tiempo de ejecución.exec() correctamente.
    usted necesita para manejar la

        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) {
                    }
            }
    Gracias por el código completo, yo no uso los Procesos en el buen camino.

    OriginalEl autor jkhouw1

  2. 34

    Finalmente, después de semanas de búsqueda:

    Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});
    Gracias, me gusta este pacto !
    Por alguna razón he tenido que utilizar: tiempo de ejecución.getRuntime().exec(new String[]{«su»,»-c»,»reiniciar ahora»}); en su lugar, pero funcionó. Muchas gracias!
    Muy bienvenida 🙂
    No funciona en mi samsung del dispositivo, tengo que dar ningún tipo de permiso ?
    Es porque su podría estar bajo /system/xbin/ en lugar de /system/bin/. La ubicación depende de cómo llegó su o cómo el dispositivo arraigada.

    OriginalEl autor Kevin Parker

  3. 1

    Me parece que no puedo hacer un reinicio mediante programación.

    Además, puedo abrir una ventana de terminal en mi teléfono android usando un Emulador de Terminal de la aplicación,
    escriba su
    obtener el símbolo # para el acceso root
    y, a continuación, escriba «#reboot»
    y me da la respuesta «no permitido!»

    Alguna sugerencia?

    OK, no importa, me lo imaginé.
    En los teléfonos de HTC el comando de reinicio no funcionará incluso con SU acceso root.
    Necesidad de invocar BUSYBOX para realizar el comando reboot.

    Si alguien se ha quedado atascado con el mismo problema en los teléfonos de HTC, hay una forma más fácil para evitar que «no permitido!» del mensaje, sin tener que instalar Busybox : en lugar de invocar el «reboot» de comandos, sólo tiene que escribir una «b» en /proc/sysrq-trigger llamando «eco b > /proc/sysrq-trigger«

    OriginalEl autor howard

  4. 1

    Este código funciona en el 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;}
    }

    OriginalEl autor XXX

  5. 0

    Después de la larga lucha que he encontrado la solución de trabajo.

    Si el sistema se utiliza de puerto serie, a continuación, ejecute a continuación comando,

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

    si el uso normal del puerto excure siguiente comando

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

    diferencia es sólo /bin y /xbin

    así que puede codificar como si el primer comando de lanzar la excepción, a continuación, ejecutar la segunda.

    En tiempo de ejecución.getRuntime().exec(new String[]{«su»,»-c»,»reiniciar ahora»}); parece que funciona para ambos casos

    OriginalEl autor Yogesh Rathi

Dejar respuesta

Please enter your comment!
Please enter your name here