2010-05-11 5 views
3

Est-il possible de redémarrer par programme le téléphone à partir d'une application (service) fonctionnant sur la machine virtuelle Dalvik?Est-il possible de redémarrer le téléphone avec Android SDK ou NDK?

Si le SDK ne fournit pas cette fonctionnalité, alors comment utiliser le NDK et appeler certaines fonctions fournies par le noyau? Je sais que cette option n'est pas préférée (libs pas assez stable), mais si c'est la seule option, je devrai considérer cela aussi.

+0

Par curiosité, quel était le modifier? Je ne vois aucune modification (majeure). – kaskelotti

+0

Il a ajouté l'étiquette android. Si vous cliquez sur le lien "édité ..." il vous montrera. – David

+0

Merci. Je cherchais cette fonctionnalité pour montrer les différences. Les tags sont bons :) – kaskelotti

Répondre

3

J'espère que non. :-)

S'il était possible de redémarrer le téléphone à volonté, une application malveillante pourrait le faire à des intervalles aléatoires et rendre votre vie malheureuse. Le NDK ne vous fournit aucune capacité supplémentaire, car Android utilise les limites de processus et les droits d'accès Linux pour la sécurité, plutôt qu'un sandbox en langage Java.

Pourquoi voulez-vous faire cela? Peut-être qu'il y a un autre moyen d'accomplir ce que vous recherchez.

+0

Merci pour la réponse. J'ai à peu près besoin de redémarrer le téléphone, ou c'est exactement ce dont j'ai besoin. L'application pour laquelle je travaille est destinée à tester des applications sur le téléphone. Le redémarrage est censé être exécuté après la fin du test afin de libérer toutes les ressources. Une autre possibilité serait de tuer une machine virtuelle Dalvik spécifique, mais je ne sais pas si cela suffit comme processus de publication et est-ce plus facile à mettre en œuvre que le redémarrage complet. – kaskelotti

+0

Les processus peuvent se tuer * eux-mêmes * assez facilement. Si vous contrôlez les applications pertinentes, elles doivent simplement accepter un message "die" et appeler System.exit(). Tuer les autres processus n'est possible que s'ils ont le même identifiant, ce qu'ils ne feront que s'ils ont été compilés et signés par le même développeur. – fadden

+0

Merci. Voulez-vous envoyer ces messages "die" sous forme d'intentions ou d'autres moyens de haut niveau, ou en envoyant des signaux disponibles dans le noyau? Que voulez-vous dire par identifiant d'utilisateur? La commande 'ps' sur le shell donne à l'utilisateur qui a démarré le processus. Y a-t-il un ID utilisateur de niveau supérieur? – kaskelotti

1

J'ai trouvé les bons appels système sous Linux qui feraient l'affaire et après des heures de bidouillage avec les chemins NDK/JNI, j'ai finalement réussi à appeler la fonction. Le résultat a été que j'ai besoin de l'autorisation de super-utilisateur pour cela. J'ai un peu deviné que ce serait le cas.

Y at-il de toute façon pour surmonter ce problème? Autre que l'enracinement du téléphone, que j'essaie toujours d'éviter.

Il est toujours possible de redémarrer le téléphone avec adb. Je suppose que cela communique avec ddmd ou un autre démon, donc pourrait-il être possible d'utiliser en quelque sorte la même fonctionnalité?

+0

Quel est l'appel système? – Reno

+0

J'avais déjà oublié tout ce sujet. Je pense que http://developer.android.com/reference/android/os/PowerManager.html#reboot%28java.lang.String%29 est plus approprié pour redémarrer l'appareil. Je ne l'ai pas testé cependant. Pour l'appel sytem, ​​je ne peux pas me souvenir exactement, peut-être sys_reboot. Notez cependant que je pense que je l'ai testé avec Android 1.6 et le noyau/API Android a beaucoup évolué depuis, peut-être même que de tels appels système ne sont plus disponibles. – kaskelotti

+0

Vrai, aucun d'entre eux ne semble fonctionner sur GB ou ICS, je posterai une réponse si je trouve quelque chose. Si vous vous souvenez des appels système utilisés, faites-le moi savoir. Merci. – Reno

3

powermanager.reboot est disponible depuis le niveau api 8. nécessite reboot permission

+0

+1 Génial de voir que le SDK Androik évolue (et que ce thread reçoit toujours les mises à jour en même temps). Je ne peux pas vraiment accepter cela comme une réponse correcte car le domaine du problème n'est plus le même. Encore recevoir un vote comme une excellente mise à jour pour les nouveaux appareils, merci pour le partage. – kaskelotti

Questions connexes