게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
UiAutomation서 null ㅠㅠ (터치 액션을 강제로 실행시키기)
게시물ID : programmer_10949짧은주소 복사하기
작성자 : 빙티
추천 : 0
조회수 : 1042회
댓글수 : 5개
등록시간 : 2015/06/07 04:23:16
옵션
  • 창작글
  • 본인삭제금지

참고 )
링크 1 : http://stackoverflow.com/questions/23159265/how-to-inject-click-event-with-android-uiautomation-injectinputevent
링크 2 : http://stackoverflow.com/questions/23417613/can-you-call-getinstrumentation-from-a-test-class-in-a-referenced-android-libr
레퍼런스 : http://developer.android.com/reference/android/app/UiAutomation.html


안녕하세요! 반도의 흔한 고딩입니다!
제가 UiAutomation을 활용한 매크로 프로그램을 개발하려고 합니다!

이게 젤리빈서부터 나온거라 아직 모르는 사람들이 많은거 같아요 ㅠㅠ
이것이 요긴한게,
캡처.PNG


(위의 유투브 영상 밑의 설명글)
UiAutomation is a new low level testing API which was introduced with Android 4.3. UiAutomation allows instrumentation tests to test across application boundaries. It supports full screen introspection support, taking screenshots, changing device orientation and injection of raw input events.
라고 다른 어플리케이션과 상호작용을 할 수 있는 testapi라고 하네요...
이것을 사용해서 매크로를 제작하려고 하는데, 여기서 질문 있습니다!!!



아래 코드(3번째 줄)에서 자꾸 nullPointerException이 뜨네요 ㅠㅠ
다른 정보 없이 그냥 NullPointerException만 뜹니다 ㅠㅠ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void uiautomationTouch(int x, int y){
    Instrumentation i = new Instrumentation();
    final UiAutomation automation = i.getUiAutomation();
    //UiAutomation claims to allow you to interact with other applications by leveraging the Accessibility Framework,
    //즉 외부 패키지 = 외부 앱 사용가능!!!!! https://www.youtube.com/watch?v=_SlBHUW0ybM
    
    //A MotionEvent is a type of InputEvent.  
    //The event time must be the current uptime.
    final long eventTime = SystemClock.uptimeMillis();
 
    //A typical click event triggered by a user click on the touchscreen creates two MotionEvents,
    //first one with the action KeyEvent.ACTION_DOWN and the 2nd with the action KeyEvent.ACTION_UP
    MotionEvent motionDown = MotionEvent.obtain(eventTime, eventTime, KeyEvent.ACTION_DOWN,
            x,  y, 0); 
    //We must set the source of the MotionEvent or the click doesn't work.
    motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
    automation.injectInputEvent(motionDown, true);
    MotionEvent motionUp = MotionEvent.obtain(eventTime, eventTime, KeyEvent.ACTION_UP,
            x, y, 0);
    motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
    automation.injectInputEvent(motionUp, true);
    //Recycle our events back to the system pool.
    motionUp.recycle();
    motionDown.recycle();
}
cs


제 생각에 Instrumentation이 문제인거 같아서
getInstrumentation()을 활용하기 위해 다음과 같이 바꾸었음에도
계속 굵은 부분(11줄)에서 nullPointerException이 뜹니다 ㅠㅠ

도대체 왜 이렇게 되는지, 어떻게 수정해야 하는지 알 수 있을까요???
답변 달아주시면 정말 감사드리겠습니다!!!






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class TestInstrumentation extends InstrumentationTestCase {
    
    @Override
    public void setUp() {
    
    }
    
    public void uiautomationTouch(int x, int y){
        Instrumentation i = getInstrumentation();
                //new Instrumentation();
        final UiAutomation automation = i.getUiAutomation();
        //UiAutomation claims to allow you to interact with other applications by leveraging the Accessibility Framework,
        //즉 외부 패키지 = 외부 앱 사용가능!!!!! https://www.youtube.com/watch?v=_SlBHUW0ybM
        
        //A MotionEvent is a type of InputEvent.  
        //The event time must be the current uptime.
        final long eventTime = SystemClock.uptimeMillis();
 
        //A typical click event triggered by a user click on the touchscreen creates two MotionEvents,
        //first one with the action KeyEvent.ACTION_DOWN and the 2nd with the action KeyEvent.ACTION_UP
        MotionEvent motionDown = MotionEvent.obtain(eventTime, eventTime, KeyEvent.ACTION_DOWN,
                x,  y, 0); 
        //We must set the source of the MotionEvent or the click doesn't work.
        motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
        automation.injectInputEvent(motionDown, true);
        MotionEvent motionUp = MotionEvent.obtain(eventTime, eventTime, KeyEvent.ACTION_UP,
                x, y, 0);
        motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
        automation.injectInputEvent(motionUp, true);
        //Recycle our events back to the system pool.
        motionUp.recycle();
        motionDown.recycle();
    }
}
cs
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호