Android調用shell腳本並獲得輸出

前段時間做的HLS流媒體服務器可以正常工作了,但是它的啓動需要在PC機命令行中進行或者在Android下載個Terminal IDE軟件,在Android上使用命令行運行,這也不是很方便,於是我要做一個Android的APP,在程序中開啓服務器,達到點擊一個按鈕就能啓動的效果。

直接上代碼:

class MyThreadStart extends Thread {
		public void run() {
			try {
				@SuppressWarnings("unused")
				Process proc = Runtime.getRuntime().exec(
						"su  -c ./data/misc/command_start.sh");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			runOnUiThread(new Runnable() {
				@Override
				public void run() {
					// TODO Auto-generated method stub
					showState.setText("服務已啓動");
				}
			});

			try {
				Process proc = Runtime.getRuntime().exec(
						"su  -c ./data/misc/command_changeIP.sh");
				final byte b[] = new byte[1024];
				r = 0;
				i = 0;
				line = "";
				final StringBuilder sb = new StringBuilder(line);
				while ((r = proc.getErrorStream().read(b, 0, 1024)) > -1) {
					if(i % 100 == 0){
						 sb.delete( 0, sb.length() );
					}
					line = new String(b, 0, r);
					sb.append(line);
					sb.append("\n");
					runOnUiThread(new Runnable() {
						@Override
						public void run() {
							// TODO Auto-generated method stub
							scroll.scrollTo(0, showState.getHeight());
							//showState.setMovementMethod(new ScrollingMovementMethod());
							showState.setText(sb.toString());
						}
					});
					i++;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

調用shell腳本並將結果顯示到TextView中。

由於我的輸出是連續不斷的,於是我將輸出的內容每隔100條信息就清空一次,否則運行一段時間後軟件就會卡死。

並且,該系統是要長時間運行的,所以當按下返回鍵離開後,再次進入軟件我要能夠看到正常運行的界面,所以我將返回鍵設置成和HOME鍵一樣的效果:

@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		// super.onBackPressed();
		Intent i = new Intent(Intent.ACTION_MAIN);
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		i.addCategory(Intent.CATEGORY_HOME);
		startActivity(i);
	}

這樣,返回鍵和HOME鍵達到的效果一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章