2011-01-02 23 views
12

Vorrei sapere se esiste un modo per riavviare il dispositivo tramite codice. Ive ha provato:Android 2.2: riavvio programmabile del dispositivo

Intent i = new Intent(Intent.ACTION_REBOOT); 
i.putExtra("nowait", 1); 
i.putExtra("interval", 1); 
i.putExtra("window", 0); 
sendBroadcast(i); 

e le autorizzazioni aggiunto per REBOOT ma il lavoro ancora doesnt.

Grazie

+1

Penso di aver bisogno di firmare la mia app con il "certificato di piattaforma". Qualcuno può dirmi come farlo? Non ho intenzione di rilasciare questa app sul mercato, ne ho solo bisogno per il mio tablet Android. Grazie – Johan

+14

Se si tratta di un HTC Desire, è possibile accendere il GPS e fare un po 'di rendering 3D con OpenGL. La combinazione provocherà un rapido surriscaldamento del telefono che a sua volta provoca un riavvio. –

+0

Attraverso l'esperienza, un dispositivo Android 2.2 (o 2.3) si riavvierà spontaneamente se ci sono abbastanza intenti in attesa in coda che non si sta effettuando la manutenzione (ad esempio, se il thread per elaborare gli intent è bloccato su qualcos'altro). Non che questo sia in alcun modo un modo * accettabile * per riavviare il dispositivo. – Michael

risposta

-4

Se il telefono è radicata, è in realtà molto semplice:

try { 
    Runtime.getRuntime().exec("su"); 
    Runtime.getRuntime().exec("reboot"); 
} catch (IOException e) { 
}    

Il primo comando vi chiederà il permesso di superutente. Il secondo, riavvierà il telefono. Non è necessario disporre di ulteriori autorizzazioni nel file manifest poiché il riavvio effettivo viene gestito dal comamand eseguito, non dall'app.

+0

Ho provato questo, ha chiesto il permesso di super utente, un messaggio di brindisi è stato mostrato dicendo che "l'applicazione è stata concessa l'autorizzazione super utente", quindi non è stata rilevata alcuna eccezione, ma il telefono non è stato riavviato. –

+1

Questo non funziona. –

+1

non funziona ... – JPM

35

Questo sembrava funzionare per me:

try { 
     Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" }); 
     proc.waitFor(); 
    } catch (Exception ex) { 
     Log.i(TAG, "Could not reboot", ex); 
    } 
+1

Sì, funziona !! Altra risposta no. – JPM

+0

Accetto. il resto non funziona per me. – TonyTakeshi

+3

Richiede il root. –

-1

Ecco una soluzione. Ricorda, il dispositivo deve essere rootato.

try{ 
    Process p = Runtime.getRuntime().exec("su"); 
    OutputStream os = p.getOutputStream();          
    os.write("reboot\n\r".getBytes()); 
    os.flush(); 
}catch(IOException) 
0

Ancora per i dispositivi radicate, ma nel caso in cui si desidera più sicuro (Process.waitFor() è condizionata, in try-catch separata, abbiamo una corretta gestione delle eccezioni, "ora", ha aggiunto al comando dopo il riavvio, che è necessario per alcuni dispositivi, ecc) e il codice più pulito forse, dare un'occhiata a questo:

Process rebootProcess = null; 
try 
{ 
    rebootProcess = Runtime.getRuntime().exec("su -c reboot now"); 
} 
catch (IOException e) 
{ 
    // Handle I/O exception. 
} 

// We waitFor only if we've got the process. 
if (rebootProcess != null) 
{ 
    try 
    { 
     rebootProcess.waitFor(); 
    } 
    catch (InterruptedException e) 
    { 
     // Now handle this exception. 
    } 
} 
0

si potrebbe utilizzare il PowerManager per farlo riavviare (questo non garantisce che sarà riavvio - OS può annullare it): links
link #2

+2

Si prega di aggiungere il codice utile insieme ai collegamenti nel caso in cui i collegamenti si interrompano nel tempo. –

0

Sto usando Xamarin. Per me la soluzione è:

Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "reboot now" }); 
Problemi correlati