Intereting Posts
AlarmManager не работает на нескольких устройствах Как использовать Android GradientDrawable Установка плагина ADT для Eclipse Позиция OnClick в String в TextView Как настроить эмулятор под управлением API 25 с использованием матрицы построения на Travis CI? Как создать подписанный файл APK с использованием интерфейса командной строки Cordova? PhoneGap: есть ли способ, чтобы клавиатура не изменяла размер представления? ApplicationTestCase устарел на уровне API 24 CustomDrawerLayout с четырех сторон экрана выдают с жестом Fling и обнаружением Графические размеры для hdpi / ldpi / mdpi Иногда выдает сообщение об ошибке «Неисправность»: ошибка вызова метода на NPObject на Android Android не может записывать видео с передней лицевой камеры, запуск MediaRecorder: -19 Android CONTENT TYPE – vnd.android.cursor.dir стандартная константа, определенная андроидом? ViewFlipper имеет «огромную» задержку Есть ли способ явно контролировать интервалы сканирования WiFi в Android?

Любой способ запуска программ оболочки на android программно?

Есть ли способ запуска команд терминала в моем приложении, а затем доступ к данным в моем пользовательском интерфейсе? В частности, top .

Solutions Collecting From Web of "Любой способ запуска программ оболочки на android программно?"

В качестве примера рассмотрим сборщик журналов. Вот соответствующий файл .

Ключ здесь:

 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())); 

Хорошо, это то, что именно сработало для меня на всякий случай, если кому-то это понадобится в будущем … 🙂

Surround в попытке и поймать

 try { Process process = Runtime.getRuntime().exec("top -n 1 -d 1"); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); } catch (InterruptedException e) { e.printStackTrace(); } 

Мы можем выполнять команды, как следует, я был успешным в этом …! Попробуйте вот так, здесь нам нужно указать полный путь команды. Для получения полного пути commmand, в терминале ur (android)

* $, Который

/ Система / бен *

 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); } 

Это также зависит от того, что вы используете в терминале … если вы используете «cat» в файле, вы также можете сделать это так.

 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: Идеальный пример для вас в проекте андроидных лабораторий под названием netmeter. Существует класс под названием Top.java, который фактически выполняет именно то, что вы хотите, и он используется в TaskList.java для отображения. http://code.google.com/p/android-labs/source/browse/#svn/trunk/NetMeter/src/com/google/android/netmeter