Android 아날로그 키보드 마우스 이벤트 분석

Socket + Instrumentation을 통해 아날로그 키보드 마우스 이벤트를 실현하는 것은 주로 다음과 같은 세 가지 부분으로 구성된다. Socket 프로그래밍: PC와 Emulator 통신을 실현하고 순환 감청 서비스 서비스를 실시한다. Socket의 감청 프로그램을 서비스에 놓아 백그라운드에서 실행하는 목적을 달성한다.여기서 설명하고자 하는 것은 서비스를 시작하는 두 가지 방식이 있는데 bindService와 startService이다. 두 가지 차이점은 전자는 서비스를 시작하는 Activity의 소멸에 따라 서비스를 소멸시킨다는 것이다. startService는 그렇지 않다. stopService를 현식으로 호출하지 않으면 백그라운드에서 실행된다. 왜냐하면 서비스는 하나의 Activity를 통해 시작해야 하기 때문이다.따라서 startService를 사용하면 현재 상황에 더욱 적합합니다. Instrumentation은 키보드 마우스 이벤트를 보냅니다. Instrumentation은send로 시작하는 함수 인터페이스를 제공하여 아날로그 키보드 마우스를 실현합니다.아래와 같이 sendCharacterSync(int keyCode)//지정된 KeyCode를 보내는 키 sendKeyDownUpSync(int key)//지정된 KeyCode를 보내는 키 sendPointerSync(MotionEvent 이벤트)//아날로그 TouchsendStringSync(String text)에 사용//문자열 보내기 주의: 위 함수는 메시지 형식으로 메시지 대기열에 던져야 합니다.직접 호출을 하면 프로그램이 붕괴될 수 있습니다.Socket 프로그래밍과 서비스 네트워크에 성공한 사례가 많기 때문에 이 글은 더 이상 설명하지 않겠습니다. 다음은 키보드 마우스 시뮬레이션 이벤트를 보내는 코드를 소개합니다.
키보드 KeyCode 보내기: 1단계.성명류handler 변수private static Handlerhandler;단계 2.순환 처리 Messagejava 코드:

[font= ]// Activity onCreate
private void createMessageHandleThread(){
//need start a thread to raise looper, otherwise it will be blocked
Thread t = new Thread() {
public void run() {
Log.i( TAG,"Creating handler ..." );
Looper.prepare();   // ,
Looper , Looper , Message Queue。 , Looper, ,
prepare 。
handler = new Handler(){
public void handleMessage(Message msg) {
//process incoming messages here
}
};
Looper.loop();
Log.i( TAG, "Looper thread ends" );
}
};
t.start();
}[/font]
단계 3.Socket에서 전달된 메시지를 받은 후 Messagejava 코드를 던집니다.

[font= ]handler.post( new Runnable() {
public void run() {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
}
} );[/font]
Touch는 좌표를 지정합니다. 예를 들어 자바 코드입니다.

[font= ]touch point(240,400)
Instrumentation inst=new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 240, 400, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 240, 400, 0));[/font]
미끄럼 궤적을 시뮬레이션하여 상기 방법 중간에 MotionEvent를 추가합니다.ACTION_MOVE

좋은 웹페이지 즐겨찾기