Lire la sortie de la commande à l'intérieur de la ligue processus
tout d'abord je vais vous présenter ma situation.
J'ai besoin d'exécuter la commande "su" dans mon application android et ça fonctionne bien. Puis-je besoin pour exécuter la commande "ls" de commandement et de lire la sortie. Je suis en train de faire en obtenant le flux de sortie de la "su" processus et de l'écriture de ma commande.
Et voilà la question. Comment faire pour lire la sortie de "ls"? Tout ce que j'ai est le "su" objet de Processus. Obtenir le flux d'entrée de il ne donne rien, parce que "su" ne pas écrire quoi que ce soit. Mais "ls", et je ne sais pas comment faire pour accéder à ses messages de sortie.
J'ai cherché sur de nombreux sites, mais je n'ai pas trouvé de solution. Peut-être que quelqu'un va m'aider:)
Ce qui concerne
OriginalL'auteur glodos | 2011-08-01
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai trouvé une solution. Il devrait ressembler à ceci:
L'espoir qu'il sera utile pour quelqu'un
Est-il un moyen de le faire sans spécifier BUFF_LEN? C'est, lire une ligne à la fois jusqu'à ce qu'il n'y a plus de lignes?
Salut, j'ai été en utilisant votre exemple avec succès mais j'ai du mal à obtenir que cela fonctionne sur Android Nougat. N'importe qui ont des idées pour cela?
L'Appel De L'Exécution.getRuntime().exec("su"); semble être assez pour moi, comme le su binary faudra sans doute au début un shell par lui-même de toute façon.
OriginalL'auteur glodos
Vérifier ce code mentionné ici:
Comment faire pour exécuter commande de terminal dans l'application Android?
Références
ce code
GScript
mmm case à l'autre/
J'ai essayé quelque chose comme ça, mais avec "su" avant la commande, mais ensuite, le système demande la permission à chaque exécution quelque peu différente des précédentes (ex. liste un autre répertoire). Tout ce que je dois faire est d'obtenir l'autorisation pour la commande "su" qu'une seule fois (l'utilisateur clique souvenir et le système ne demande jamais à nouveau ), puis d'exécuter mes ordres à l'intérieur de ce processus et de lire leur production. Pour être clair: 1. Créer la ligue processus. 2. Écrire "ls" de commande pour le flux de sortie (ls exécute avec la ligue de l'autorisation). 3. Lire "ls" de sortie. Je suis incapable d'atteindre le point 3
OriginalL'auteur Sherif elKhatib
J'ai modifié accepté de répondre par @glodos pour les problèmes suivants:
ps
en shell (c'est à direadb shell
)après plusieurs exécutions, alors vous allez voir plusieurs
su
processusvivant. Ils ont besoin d'être terminée correctement.
waitFor()
assurez-vous que le processus est terminé.read=-1
, maintenant les commandes avec videstdout
peut être exécutée. Auparavant, ils s'écrasèrent surnew String(buffer, 0, read)
À l'aide de
StringBuffer
pour plus d'efficacité des chaînes de manutention.Certains crédits d'aller à @Sherif elKhatib ))
OriginalL'auteur Mixaz