이전포스트

[Android] Key Event 발생 시키기.

freemmer 2011. 5. 19. 11:40

adb shell 에서 keyevent 를 발생시키는 방법이다.

Test app 을 만들어서 해봤는데...잘 된다...

 

adb shell에서는 아래와 같이 사용하면 된다.

# input keyevent 4
input keyevent 4

 

여기서 4는 key code 값이며, keyevent.java 에 보면 나와 있다.

 

test app 에서는 아래와 같이 사용하면 된다.

이는 input.java 소스에 나와 있다.

안드로이드는 왠만한 코드는 모두 찾아보면 나오는것 같다.

 

        int eventCode = Integer.parseInt(event);
        long now = SystemClock.uptimeMillis();
        Log.i("SendKeyEvent", event);
        try {
            KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, eventCode, 0);
            KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, eventCode, 0);
            (IWindowManager.Stub
                .asInterface(ServiceManager.getService("window")))
                .injectKeyEvent(down, true);
            (IWindowManager.Stub
                .asInterface(ServiceManager.getService("window")))
                .injectKeyEvent(up, true);
        } catch (RemoteException e) {
            Log.i("Input", "DeadOjbectException");
        }

Android KeyEvent 강제 발생 ( Instrumentation keyCode ) 

하드웨어 키를 누른 효과를 프로그래밍 내에서 인위적으로 발생시킨다. 
만들고 나면 별거 아닌데 이거 만들려고 하루 반나절 시간 보냈음 ㅠㅠ
=========================================================================================================
package lowmans.test;

import android.app.Activity;
import android.app.Instrumentation;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread(new Runnable() {         
   public void run() {                 
       new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_UP);
   }   
}).start();
}
});
}
} 

반응형