android : comment faire pour exécuter une commande shell à partir de code
Je suis en train d'exécuter une commande à partir de l'intérieur de mon code,
la commande est "echo 125 > /sys/devices/platform/lampe de poche.0/led/lampe de poche/luminosité"
et je peux courir sans problème à partir de la commande adb shell
Je suis en utilisant la classe d'Exécution pour l'exécuter :
Runtime.getRuntime().exec("echo 125 > /sys/devices/platform/flashlight.0/leds/flashlight/brightness");
Mais j'ai une erreur d'autorisations depuis que je ne suis pas censé pour accéder au répertoire sys.
J'ai aussi essayé de placer la commande dans une String[] juste au cas des espaces causé un problème, mais il n'a pas beaucoup differense.
Quelqu'un sait-il aucune solution pour cela ?
OriginalL'auteur ee3509 | 2010-06-16
Vous devez vous connecter pour publier un commentaire.
Le téléphone doit être rooté, par la suite, vous pouvez faire quelque chose comme:
Cela ne fonctionnera que sur un dispositif enracinée. Lorsque vous utilisez la BAD à partir d'un PC, vous avez plus de privilèges que d'une application en cours d'exécution sur l'appareil (et à la différence des garanties de l'appareil, sur un émulateur, la BAD peut effectivement exécuter des commandes en tant que root). Android est très spécifiquement conçus de ne pas autoriser l' apps pour exécuter des commandes avec le système des répercussions à l'échelle. La raison pour laquelle les gens pirater leurs appareils avec la racine des cales est de percer un grand trou à travers ce modèle de sécurité - un trou qui n'est pas censé exister sur un stock de l'appareil.
OriginalL'auteur Loxley
Convenu, vous avez probablement besoin de root le téléphone pour écrire dans les fichiers système. Je suis surpris de la luminosité n'est pas exposé à travers le SDK.
Pour plus de détails sur l'exécution de commandes shell à partir du code, découvrez ce projet:
Le fichier/périphérique n'existe pas sur mon téléphone portable. Par quels moyens la lampe de poche.0 répertoire viennent d'être? J'ai cherché autour de l'aide
adb shell
et constaté que je peuxcd
tout le chemin jusqu'à/sys/devices/platform
mais je n'ai pas de fichier nommé lampe de poche.0. En outre, tout dans ce répertoire est la propriété de root avec le mode 755, ce qui signifie que seul root peut écrire dans les fichiers. Cette autorisation semble être appliquée à tout underneith/sys
donc, si votreflashlight.0/leds/flashlight/brightness
n'existe pas, et est la propriété de root, et a la mode 755 autorisations (drwxr-xr-x
) thenyou doit avoir de la racine.Je suis sur HTC Desire et le fichier est là, j'ai exécuté la commande avec succès (la led sur l'arrière s'allume) à partir de la commande adb shell sans avoir enraciné mon appareil.Les autorisations pour la luminosité sont (-rw-rw-rw-)
OriginalL'auteur Brad Hein
Si vous êtes juste essayer de régler la luminosité, pourquoi ne pas le faire par le biais de la à condition de l'API (AKA, est-il une raison que vous essayez de le faire de la façon dont vous êtes).
Ah, mon erreur. Je viens de voir la "luminosité" comme le dernier param, et ne pas voir la lampe de poche, une partie du chemin.
OriginalL'auteur JasCav
La commande adb shell peut se comporter comme un super-utilisateur sans enracinée appareils.
c'est un debug bridge. vous pouvez faire ce que vous voulez à travers elle.
MAIS, lors de votre appel de l'Exécution.getRuntime().exec, vous n'avez pas la même premissions. certaines commandes shell ne sont pas encore disponibles à partir de exec.
ainsi, non seulement vous avez besoin d'un dispositif enracinée, vous devez également su premmisions.
OriginalL'auteur Vlad
Vous pouvez également remout /système avec des autorisations d'écrire..
OriginalL'auteur Kemal
Je pense que l'appareil aura besoin d'être "enracinés" pour ce travail. Avoir une recherche sur google et de voir comment les autres développeurs n'ont pas cela, il n'y a pas de pénurie de lampe de poche apps.
OriginalL'auteur thomasfedb