Esiste un modo per eseguire i comandi del terminale sulla mia applicazione e quindi accedere ai dati sulla mia IU? Specificamente top
.Un modo per eseguire i comandi della shell su Android a livello di programmazione?
risposta
Controllare Log Collector come esempio. Ecco lo relevant file.
la chiave è qui:
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("logcat");//$NON-NLS-1$
[...]
Process process = Runtime.getRuntime().exec(commandLine);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
dipende anche da ciò che si sta eseguendo nel terminale ... se si esegue "gatto" su un file anche si può fare in questo modo.
final private String MEM_FILE = "/proc/meminfo";
public Long readMem() {
String[] segs;
FileReader fstream;
try {
fstream = new FileReader(MEM_FILE);
} catch (FileNotFoundException e) {
Log.e("readMem", "Could not read " + MEM_FILE);
return false;
}
BufferedReader in = new BufferedReader(fstream, 500);
String line;
try {
while ((line = in.readLine()) != null) {
if (line.indexOf("MemTotal:") > 0) {
Log.e("MemTotal", line);
segs = line.trim().split("[ ]+");
memTotal = Long.parseLong(segs[1]);
}
if (line.indexOf("MemFree:") > 0) {
Log.e("MemFree", line);
segs = line.trim().split("[ ]+");
memFree = Long.parseLong(segs[1]);
}
}
updateMem(); //call function to update textviews or whatever
return true;
} catch (IOException e) {
Log.e("readMem", e.toString());
}
return false;
}
EDIT: C'è un esempio perfetto per te nel progetto di laboratori di Android chiamato NetMeter. Esiste una classe chiamata Top.java che esegue esattamente ciò che si desidera e viene utilizzato in TaskList.java per essere visualizzato. http://code.google.com/p/android-labs/source/browse/#svn/trunk/NetMeter/src/com/google/android/netmeter
Non cat, in particolare voglio eseguire la parte superiore e visualizzare i risultati in tempo reale sullo schermo. Sono a conoscenza di applicazioni che emulano il terminale su cui ho trovato il massimo funzionante, quindi mi chiedevo come avrei potuto tirare i risultati di top e visualizzarli sull'interfaccia utente. – Shouvik
Vedere le mie modifiche sopra per un esempio funzionante di esattamente ciò che si desidera. – androidworkz
Ehi, grazie ... Devo passare un po 'di tempo qui, ma penso che sia così ... Sei stato di grande aiuto! – Shouvik
Va bene questo è ciò che esattamente ha funzionato per me nel caso in cui qualcuno ha bisogno in futuro ... :)
Surround nel cercare di catturare
try {
Process process = Runtime.getRuntime().exec("top -n 1 -d 1");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
} catch (InterruptedException e) {
e.printStackTrace();
}
Quando faccio quello seguito da String result = null; risultato = bufferedReader.readLine(); Log.i ("OnClickListener", "risultato:" + risultato); Visualizza solo "result:" (la stringa 'result' è vuota). Qualche idea sul perché questo sarebbe? Inoltre, quando provo process = Runtime.getRuntime(). Exec ("/ system/bin/ping abc"); invece, la stringa 'result' è null. Entrambi questi comandi funzionano come previsto da un terminale 'adb shell'. –
Mi dispiace @DavidDoria, non ho ancora toccato Android tra 2 anni. E 'stato qualcosa in cui ho provato la mia mano mentre ero al college. Faresti meglio a postarlo come una domanda. – Shouvik
Ho funzionato. Il problema era che la prima riga da "top" era vuota (una nuova riga, per creare la tabella). Il caso in cui restituisce null quando c'era effettivamente output era perché avevo bisogno di ottenere stderror (getErrorStream) invece di stdout (getInputStream). –
Noi, in grado di eseguire comandi come seguire, ero riuscito a farlo ....! prova così, qui abbiamo bisogno di specificare il percorso completo del comando. per ottenere il percorso completo della commmand, a ur terminale (Android) tipo
* $ che ls
/system/bin *
try {
// Executes the command.
Process process = Runtime.getRuntime().exec("/system/bin/ls /sdcard");
// Reads stdout.
// NOTE: You can write to stdin of the command using
// process.getOutputStream().
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
process.waitFor();
return output.toString();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
- 1. Come eseguire i comandi della shell da un'applicazione Mac/MacRuby?
- 2. Python - come eseguire i comandi della shell con pipe?
- 3. Come eseguire i comandi USSD su Android?
- 4. C'è un modo per scoprire a livello di programmazione specifiche sulla GPU di un dispositivo Android?
- 5. Accesso ai comandi di bash per comandi specifici a livello di programmazione
- 6. Inviare comandi a vim a livello di programmazione
- 7. C'è un modo per codificare LaunchScreen a livello di programmazione
- 8. c'è un modo per ottenere la frequenza di aggiornamento della visualizzazione a livello di programmazione?
- 9. Come eseguire i comandi della shell in modo sincrono in PHP
- 10. Comandi WPF, Come dichiarare i comandi a livello di applicazione?
- 11. Come combinare i comandi della shell
- 12. Modificare le autorizzazioni e la proprietà della porta tty in Android a livello di programmazione
- 13. Cambia i profili Android a livello di programmazione
- 14. Fare clic su visualizzazioni a livello di programmazione in Android
- 15. Impedisce a livello di programmazione della batteria
- 16. Come eseguire lo screenshot a livello di programmazione?
- 17. Posso utilizzare Fabric per eseguire comandi di shell interattivi?
- 18. I comandi della shell sono scritti in quale lingua?
- 19. Impostazione android: animateLayoutChanges a livello di programmazione
- 20. Su Android, come commuti le attività a livello di programmazione?
- 21. L'altoparlante impostato su Android a livello di programmazione
- 22. Esegui automaticamente i comandi all'avvio della shell python
- 23. Come eseguire l'applicazione C++ su Android SHELL
- 24. Comandi shell Adb per modificare le impostazioni o eseguire attività su un telefono
- 25. Come creare un menu a livello di programmazione in Android?
- 26. Posso usare ECHO per eseguire i comandi?
- 27. Il modo migliore per installare IIS7 a livello di programmazione
- 28. Ingrandire un MKMapView a livello di programmazione
- 29. C'è un modo per cancellare i punteggi nel Game Center di Apple a livello di programmazione?
- 30. Come eseguire comandi sulla shell attraverso pitone
quindi in fondo se mi piacerebbe correre in alto, ho potuto basta sostituire commandLine con la parte superiore e dovrebbe funzionare correttamente? Sto ottenendo un errore quindi suppongo che avrò bisogno di un po 'più di aiuto .. grazie .. – Shouvik
Devo racchiudere il processo Process = Runtime.getRuntime(). Exec (commandLine); con un tentativo e prendere perché continuo a ottenere questa proiezione IOException. Ho guardato gli esempi java sembrano gestirlo in questo modo ... – Shouvik
Sì .. di nuovo, controlla il link per vedere tutto ciò che fanno. Devi assolutamente fare il controllo degli errori - non aspettarti che 'top' sia presente su tutti i telefoni. – EboMike