2012-10-29 3 views
2
adb shell sendevent /dev/input/event0 3 0 45 
    adb shell sendevent /dev/input/event0 3 1 784 
    adb shell sendevent /dev/input/event0 1 330 1 
    adb shell sendevent /dev/input/event0 0 0 0 
    adb shell sendevent /dev/input/event0 1 330 0 
    adb shell sendevent /dev/input/event0 0 0 0 

안드로이드 코드를 통해 sendevent를 호출 할 수있는 방법이 있습니까? 위의 명령을 쉘에서 실행하면 에뮬레이터에서 click 이벤트를 생성 할 수 있습니다. 안드로이드 코드에서 동일한 효과를 생성 할 수 있습니까? 어느 누구도 나를 도와주세요.코드를 통해 안드로이드의 sendevent 호출

답변

0

"sendevent"명령을 클릭 (또는 터치)에 대한 이벤트가 필요 "루트"또는 "SU"권한.

나는 동일한 문제를 this question에서 풀려고했지만이 방법으로 또는 다른 방법으로 만 SDK 도구를 사용하여 터치 시뮬레이션을위한 해결책을 찾지 못했습니다.

그러나 터치를 시뮬레이트하는 다른 방법이 있습니다 (this article에서 설명).

자신 (서명 된 응용 프로그램 및 시스템 응용 프로그램으로 실행) 다음 작업의 경우 :

Thread thread = new Thread(){ 
@Override 
public void run(){ 
    try { 
     this.sleep(2000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    Instrumentation m_Instrumentation = new Instrumentation(); 
     m_Instrumentation.sendPointerSync(MotionEvent.obtain(
       SystemClock.uptimeMillis(), 
       SystemClock.uptimeMillis(), 
      MotionEvent.ACTION_DOWN,posx, posy, 0)); 
    m_Instrumentation.sendPointerSync(MotionEvent.obtain(
      SystemClock.uptimeMillis(), 
      SystemClock.uptimeMillis(), 
      MotionEvent.ACTION_UP,posx, posy, 0)); 
    } 
}; 
thread.start(); 
+0

답장을 보내 주셔서 감사합니다 !!! – user1752763

1

나는이를 넣어 위치를 알고 있지만하지 않는 사람에 작동하도록 'sendevent'코드를 얻는 데 문제가있는 경우 ICS는 처음에 여기에 게시 된 방법을 사용하여 어떻게하는지 알아 냈습니다. SU 접근이 ​​필요합니다. 나를위한 문제는 적어도 이것이었다.

아래 코드를 게시하고 각 부분을 설명해 드리겠습니다.

터치 패드의 터치 이벤트에 대한 16 진 코드를 얻기 위해 getevent (내/dev/event1)를 실행하면 16 진수에서 12 진수로 변환 한 다음과 같은 데이터 묶음이 나옵니다.

첫 번째 그룹은 7 회선이고 다음은 단일 터치 이벤트의 경우 9 회입니다. 왜? 실마리 없음. 구문은 this (장치) (1, 3 또는 0, 이해하지 못함)입니다. (값은 많은 것을 의미 할 수 있습니다 .58 내 경우에는 장치의 식별자 였고 53과 54는 좌표가 값임을 나타냅니다.) value 첫 번째 부분이 그가 그것을 집어 '의미'그는 자신의 손가락을 내려 놓고 '#을 의미하는 경우 등) 모든이와

sendevent /dev/input/event1 3 58 255 #means '3, variable 58 is 255' 
sendevent /dev/input/event1 3 53 534 #'3, variable 53 (x axis) is 534 
sendevent /dev/input/event1 3 54 321 #'3, variable 54 (y axis) is 534 
sendevent /dev/input/event1 3 48  8 #'3, variable 48 (pressure maybe) is 8 
sendevent /dev/input/event1 0  2  0 #i think the 0,2,0 means 'finger down or up 
sendevent /dev/input/event1 1 330  1 #this, followed by 0,0,0 means 'end of event' 
sendevent /dev/input/event1 0  0  0 

같은,이 이벤트의 다른 쪽 끝입니다 동의합니다.

sendevent /dev/input/event1 3 58  0 
sendevent /dev/input/event1 3 53 534 
sendevent /dev/input/event1 3 54 321 
sendevent /dev/input/event1 3 48  8 
sendevent /dev/input/event1 0  2  0 
sendevent /dev/input/event1 0  0  0 
sendevent /dev/input/event1 1 330  0 
sendevent /dev/input/event1 0  2  0 
sendevent /dev/input/event1 0  0  0 

언뜻보기에 내가 잘못 된 두 가지 터치 이벤트 인 것처럼 보일 것입니다. 실제로 '전화와 응답 유형의 상황'입니다. 이 코드는 단일 터치 이벤트를 생성합니다. 그런데 쉘 스크립트와 smanager를 사용하여 16 진수 데이터를 해독하지 않고도 'sendeventgetevent.sh'라고 불렀습니다. google it.

나는 설명하기가 어렵지만 루트라면 다음 코드는 4.0.4 ICS에서 제공되는 좌표에서 단일 터치 이벤트를 생성합니다. 당신은 그것을 바로 잡기 위해 그것을 조정해야 할 것입니다. sendeventgetevent.sh를 다운로드하고 smanager와 같은 스크립트 관리자를 사용하여 실행하십시오.

$su 
sendevent /dev/input/event1 3 58 255; 
sendevent /dev/input/event1 3 53 534; 
sendevent /dev/input/event1 3 54 321; 
sendevent /dev/input/event1 3 48  8; 
sendevent /dev/input/event1 0  2  0; 
sendevent /dev/input/event1 1 330  1; 
sendevent /dev/input/event1 0  0  0; 
sendevent /dev/input/event1 3 58  0; 
sendevent /dev/input/event1 3 53 534; 
sendevent /dev/input/event1 3 54 321; 
sendevent /dev/input/event1 3 48  8; 
sendevent /dev/input/event1 0  2  0; 
sendevent /dev/input/event1 0  0  0; 
sendevent /dev/input/event1 1 330  0; 
sendevent /dev/input/event1 0  2  0; 
sendevent /dev/input/event1 0  0  0; 
관련 문제