Uygulamamda terminal komutlarını çalıştırmanın ve daha sonra UI'deki verilere erişmenin bir yolu var mı? Spesifik olarak top
.Android'de kabuk komutlarını programlı olarak çalıştırmanın herhangi bir yolu var mı?
cevap
Örnek Toplayıcıyı bir örnek olarak inceleyin. İşte relevant file.
anahtar
buradadır: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()));
aynı zamanda terminalde çalışan ne ... Eğer böyle yapmak da bir dosya üzerinde "kedi" çalıştırıyorsanız bağlıdır.
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;
}
DÜZENLEME: NetMeter denilen android laboratuarları projede sizin için mükemmel bir örnek vardır. Top.java adlı bir sınıf var aslında tam olarak istediğiniz şeyi yapar ve TaskList.java'da görüntülenecek şekilde kullanılır. http://code.google.com/p/android-labs/source/browse/#svn/trunk/NetMeter/src/com/google/android/netmeter
Kedi değil, özellikle üst sıralarda koşmak ve ekranda görüntülenen canlı sonuçları almak istiyorum. En çok çalıştığı terminali taklit eden uygulamaların farkındayım, bu yüzden en üstteki sonuçları nasıl çekip UI'de nasıl görüntüleyebileceğimi merak ediyordum. – Shouvik
Tam olarak istediğiniz değişiklikleri içeren bir çalışma örneği için yukarıdaki düzenlemelere bakın. – androidworkz
Hey teşekkürler ... Burada biraz zaman geçirmem gerekiyor, ama bence bu ... Çok iyi bir yardımın var! – Shouvik
Tamam bu tam denemede ... herkes gelecekte ihtiyacı ihtimale benim için :)
Surround çalıştı ve biz gibi komutları yürütebilirsiniz
try {
Process process = Runtime.getRuntime().exec("top -n 1 -d 1");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
} catch (InterruptedException e) {
e.printStackTrace();
}
Bunu gerçekleştirdiğimde Dize sonucu = null; result = bufferedReader.readLine(); Log.i ("OnClickListener", "sonuç:" + sonuç); Sadece "sonuç:" gösterir ('sonuç' dizesi boş). Bunun neden olabileceği konusunda bir fikrin var mı? Ayrıca, process = Runtime.getRuntime() çalıştırmayı denediğimde exec ("/ system/bin/ping abc"); bunun yerine, 'sonuç' dizesi boş. Bu komutların her ikisi de 'adb shell' terminalinden beklendiği gibi çalışır. –
Üzgünüm @DavidDoria, Ben 2 yıl içinde android dokunmadım. Üniversitedeyken elimi denediğim bir şeydi. Bir soru olarak yayınlamaktan daha iyi olursun. – Shouvik
Çalışıyorum. Sorun, 'ilk' WAS boş gelen ilk satırın (masayı oluşturmak için yeni bir satır) olmasıydı. Aslında çıktı çıktığında null döndürme durumu, stdout (getInputStream) yerine stderror (getErrorStream) almam gerektiğinden kaynaklanıyordu. –
yakalamak budur izleyin, bunu yaparken başarılı oldum ....! Bu şekilde deneyin, burada tam komut yolunu belirtmeliyiz. Commmand tam yolunu almak için, ur terminali (android) de yazın
* ls hangi $
/sistem/bin * böylece temelde ben üst ben olabilir çalıştırmak isterseniz
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. WordPress: php betiğinden cli komutlarını çalıştırmanın bir yolu var mı?
- 2. Android'de PHP'yi çalıştırmanın herhangi bir yolu var mı
- 3. Git komutlarını atomik olarak (kabuk ile değil) birleştirmenin bir yolu var mı?
- 4. Görüntü yenileme hızını programlı olarak almanın bir yolu var mı?
- 5. Clojure özel formlarını programlı olarak toplamanın bir yolu var mı?
- 6. Swift'de NSCollectionView programlı olarak kurmanın bir yolu var mı?
- 7. Gruntjs görevinde MULTIPLE kabuk komutlarını nasıl çalıştırırım?
- 8. Kabuk komutlarını groovy'den doğru olarak nasıl çağıracağım
- 9. java kullanarak programlı olarak gmail şifresini değiştirmenin herhangi bir yolu var mı?
- 10. "Vurgulu" kodun herhangi bir yolu var mı?
- 11. Kabuk pencereleri olmadan kabuk komutlarını çalıştırma
- 12. Bir gemide testleri çalıştırmanın kolay bir yolu?
- 13. Herhangi bir IPMI simülatörü var mı?
- 14. Otomatik olarak herhangi bir Logcat Girişine çift tıklama ile erişmenin herhangi bir yolu var mı?
- 15. Programsal olarak arayabileceğim herhangi bir Eclipse refactoring API var mı?
- 16. Bir dizenin piksel uzunluğunu hesaplamanın herhangi bir yolu var mı?
- 17. Doğrudan bir ikili SONAME değiştirmenin herhangi bir yolu var mı?
- 18. Bir AWS hizmeti için eylem başına mevcut eylemlerin tümünü programlı olarak listelemenin bir yolu var mı?
- 19. Belirli bir uygulama içinde tüm Windows programlı olarak yerleştirmenin bir yolu var mı?
- 20. Vim olarak sözdizimsi renkli bir dosyayı HTML olarak kopyalamanın herhangi bir yolu var mı?
- 21. Kelimenin bir kısmını önişlemciyle değiştirmenin herhangi bir yolu var mı?
- 22. Yazdırıldığında bir diziden "," öğesini kaldırmanın herhangi bir yolu var mı?
- 23. HTML: Bir textarea'da resim göstermenin herhangi bir yolu var mı?
- 24. Bir jeneratör işlevini dışa aktarmanın herhangi bir yolu var mı?
- 25. Raylar/Yakut: Yığın izlerini kısaltmanın herhangi bir yolu var mı?
- 26. Python: Sabit parametreleri bildirmenin herhangi bir yolu var mı?
- 27. Bir metin kutusunu düzenlemeyi programlı olarak iptal etmenin bir yolu var mı?
- 28. Eclipse emülatörünü kullanarak bir android uygulaması çalıştırmanın daha kolay bir yolu var mı?
- 29. Heroku'da postgres'i yeniden başlatmanın herhangi bir yolu var mı?
- 30. Özel olaylarla ek veri aktarmanın herhangi bir yolu var mı?
sadece commandLine'ı en baştan değiştirin ve düzgün çalışmalı mı? Bir hata alıyorum, sanırım biraz daha yardıma ihtiyacım var .. teşekkürler .. – Shouvik
Süreç işlemini çevrelemem gerekir = Runtime.getRuntime(). Exec (commandLine); Bir denemek ve yakalamak ile bu yüzden IOException atar. Ben java örnekleri baktım bu şekilde halledilir görünüyor ... – Shouvik
Evet .. tekrar, onlar yaptıkları her şeyi görmek için bağlantı kontrol edin. Kesinlikle hata kontrolü yapmanız gerekir - tüm telefonlarda orada olmak için 'üst' beklemeyin. – EboMike