[独習android]シェルコマンド(シェルスクリプトなど)をアプリから実行する

Posted November 23rd, 2010 in General. Tagged: , , .

アプリからシェルコマンドやシェルスクリプトを呼べると便利だよね
Dynabook AZ(#aznyan)の起き上がり問題に対処しようとして色々調べた断片

ポイント

サンプルコード

	// root取得してサスペンドイベントを投げる
	private void suspend() {
		try {
			Process p = Runtime.getRuntime().exec("su");
			DataOutputStream dos = new DataOutputStream(p.getOutputStream());
			dos.writeBytes("sendevent /dev/input/event0 1 142 1\n"); // 押す
			dos.writeBytes("sendevent /dev/input/event0 1 142 0\n"); // 離す
			dos.writeBytes("exit\n");					
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

おまけ

サンプルコードでは su を呼んでrootを取得し、Input Subsystemを利用して、sendevent で コード 142(Dynabook AZのサスペンド) の押す/離す をシミュレートしているです。以下を参照

androidで入力デバイスを操作したときにどんなイベントが投げられているかはシェルで getevent というコマンドを使うと調べられる。例: geteventを実行して ‘a’ キーを押したとき

/ # getevent
add device 1: /dev/input/event4
  name:     "AVRCP"
add device 2: /dev/input/event3
  name:     "nvec ec_event"
add device 3: /dev/input/event1
  name:     "nvec mouse"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 4: /dev/input/event0
  name:     "nvec keyboard"
could not get driver version for /dev/input/mice, Not a typewriter
add device 5: /dev/input/event2
  name:     "USB Camera"
/dev/input/event0: 0001 001e 00000001
/dev/input/event0: 0001 001e 00000000

関連情報

Posted November 23rd, 2010 in General. Tagged: , , .

Comments are closed.


track feed