Je travaille sur un programme qui doit être capable de déterminer ce qui est sur le périphérique android à Xlocation. J'utilise "su ls Xlocation"comment envoyer une commande à l'exécution en utilisant "su" et récupérer toutes les lignes de DataInputStream
Je veux revenir à la liste des fichiers, mais seulement récupérer le premier élément. Ai-je manqué une commande qui obtient la ligne suivante? Ou y a-t-il autre chose que je dois faire?
ci-dessous est ma commande J'envoie
String[] commands = new String[]{"ls /system/app/"};
return doCommand(commands);
Voici ma méthode actuelle pour doCommand
private boolean doCommand(String[] commands)
{
ArrayList<String> output = new ArrayList<String>();
boolean ran = false;
try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream ins = new DataInputStream(process.getInputStream());
// This part works I sends the command right!
for (String single : commands)
{
os.writeBytes(single + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
ran = true;
}
int av = -1;
while (av != 0)
{
//////////////////////////// WORKING ON THIS TO GET ALL INFO /////////////////
av = ins.available();
if (av != 0)
{
byte[] b = new byte[av];
ins.read(b);
output.add(new String(b));
System.out.println(new String(b) + "Recieved form modem");
}
}
}
catch(Exception ex){}
return ran;
}
Comme on le voit actuellement, il ne retourne que vrai ou faux. Cependant, en cours de débogage, je n'ai que le premier élément en sortie. (output = "[first.apk")
Edited Newer Version;
public ArrayList<String> doCommand(String[] commands)
{
ArrayList<String> output = new ArrayList<String>();
try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream ins = new DataInputStream(process.getInputStream());
for (String single : commands)
{
os.writeBytes(single + "\n");
//os.flush();
output.add("true");
}
os.writeBytes("exit\n");
byte[] bc = new byte[10000];
String st = "";
while(ins.read(bc) != -1)
{
st += new String(bc);
os.flush();
}
output.add(st);
os.flush();
os.close();
ins.close();
process.waitFor();
}
catch(Exception ex)
{}
return output;
}
Maintenant obtenir une quantité décente de la production, mais pas encore tout où le répertoire a de grandes pièces à l'intérieur limite de taille de l'octet [10000] J'ai vérifié.
Si quelqu'un veut améliorer cela et obtenir une réponse exacte qui fonctionne, je vérifie toujours ce poste.
Merci
Ceci est une bonne réponse et l'a aussi bien mais cela ne résout pas mon problème c'est peut-être mon ignorance. Je ne travaille pas pour le cas "ls/system/app/appname _ *" + "\ n" – SatanEnglish
mais fonctionnera pour "ls/system/app /" MON orginal me donne un retour pour l'appname_ * mais c'est tout s'il y a plus de 1 – SatanEnglish