2013-03-13 1 views
0

Android 서비스에서 getevent를 실행하여 개발 컴퓨터의 명령 프롬프트에서 getevent를 호출하기 위해 adb를 실행할 때 표시되는 것과 유사한 결과를 얻을 수 있습니까? 내가 좋아하는 뭔가를하려고 할 때 :Android 서비스에서 getevent를 호출 할 수 있습니까?

ProcessBuilder builder = new ProcessBuilder() 
    .command("getevent") 
    .redirectErrorStream(true) 
    .start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(builder.getInputStream())); 
... 

을 나는 각 장치에 대해 얻을 출력과 같이 보인다 :

열 수 없습니다는/dev/입/이벤트 [N], 권한

거부 ​​그냥 아닌가요 Android 보안상의 이유로 낮은 수준의 정보에 액세스 할 수 있습니까? "루팅 된"장치에서 가능합니까?

이유 : 사용성 테스트를 위해 Android 기기에 사용자의 동작 (터치 및 동작 이벤트)을 기록하고 싶습니다. 접근성 서비스가 갈 길이 멀지 만 정보가 충분하지 않습니다. 예를 들어, 스 와이프 제스처의 경우 사용자가 스 와이프 한 위치의 화면 좌표를 가져올 수 없습니다. 터치 스크린에서 낮은 레벨의 입력을받는 것이 더 자세한 정보를 얻을 수 있다고 생각했습니다. 아마 이것을 할 수있는 더 좋은 방법이 있을까요? (저는 안드로이드 세계의 초보자입니다. 이런 종류의 일은 Windows에서 쉽습니다.)

답변

0

UIAutomator를 검색하십시오. 이것은 당신이하고 싶은 일을합니다.

1

이렇게 할 수 있습니다.

th = new Thread(new Runnable(){ 
     private Process exec; 

     @Override 
     public void run() { 
      try { 
       exec = Runtime.getRuntime().exec(new String[]{"su","-c","getevent -t " + device}); 
       InputStreamReader is = new InputStreamReader(
         exec.getInputStream()); 
       String s; 
       BufferedReader br = new BufferedReader(is); 
       while(((s = br.readLine()) != null) && run){ 
        ... 
       } 
       is.close(); 
       exec.destroy(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
} 

당신은 사용해야합니다 'SU'루트 권한를 얻을 수 있지만, 4K의 버퍼 크기가 이, 당신이 할 수 있기 때문에이 방법으로 당신은 실시간 이벤트를 얻을 수 없다 4k 데이터가 포함 된 후에 만 ​​데이터를 가져옵니다.

0

getevent/sendevent 명령을 실행하려면 휴대 전화가 루 티어이어야합니다.

한 가지 방법은 Qute: Command Console & Terminal Emulator과 같은 게임 스토어의 터미널 에뮬레이터를 설치하는 것입니다. 에서

터미널 다음을 입력 :

1) su (가

2) getevent (또는 getevent -c 8이 터미널을 홍수 것입니다 단지 8 라인 다른 출력 getevent에 필요한 루트 액세스)을 얻을 수 있습니다)