2011-01-02 3 views
12

Je voudrais savoir s'il existe un moyen de redémarrer le périphérique via le code. Ive a essayé:Android 2.2: Redémarrer le périphérique par programme

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

et a ajouté des autorisations pour REBOOT mais il ne fonctionne toujours pas.

Merci

+1

Je pense que je dois signer mon application avec le "certificat de plate-forme". Quelqu'un peut-il me dire comment faire cela? Je ne prévois pas de sortir cette application sur le marché, j'en ai juste besoin pour ma tablette Android. Merci – Johan

+14

Si c'est un HTC Desire, vous pouvez allumer le GPS et faire un rendu 3D avec OpenGL. La combinaison entraînera une surchauffe rapide du téléphone, ce qui provoquera à son tour un redémarrage. –

+0

Par expérience, un périphérique Android 2.2 (ou 2.3) redémarrera spontanément s'il y a suffisamment d'intentions en suspens que vous ne répondez pas (par exemple, si votre thread pour traiter les intentions est bloqué sur autre chose). Ce n'est pas vraiment une façon * acceptable * de redémarrer l'appareil. – Michael

Répondre

-4

Si le téléphone est enraciné, il est en fait très simple:

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

La première commande vous demandera la permission de super-utilisateur. La seconde, va redémarrer le téléphone. Il n'y a pas besoin d'autorisations supplémentaires dans le fichier manifeste puisque le redémarrage réel est géré par la comamand exécutée, pas par l'application.

+0

J'ai essayé cela, il a demandé l'autorisation de super utilisateur, un message toast a été montré disant 'l'application a été accordée autorisation super utilisateur ', alors aucune exception attrapée, mais le téléphone n'a pas redémarré. –

+1

Cela ne fonctionne pas. –

+1

ne fonctionne pas ... – JPM

35

Cela semblait fonctionner pour moi:

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

Yep ça marche !! Une autre réponse ne le fait pas. – JPM

+0

D'accord. le reste ne fonctionne pas pour moi. – TonyTakeshi

+3

Racine requise. –

-1

est ici une solution. Rappelez-vous, l'appareil doit être enraciné.

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

encore pour les appareils ancrés, mais si vous voulez plus sûr (Process.waitFor() est conditionnée, dans try-catch séparé, nous avons une bonne gestion des exceptions, « maintenant » ajouté à la commande après le redémarrage, ce qui est nécessaire pour certains appareils, etc.) et le code peut-être plus propre, jetez un oeil à ceci:

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

Vous pourriez utiliser PowerManager pour le faire redémarrer (cela ne garantit pas que ça va redémarrer - OS peut annuler it): links
link #2

+2

Veuillez ajouter le code utile ainsi que les liens au cas où les liens se rompent avec le temps. –

0

J'utilise Xamarin. Pour moi la solution est:

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