마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

터치를 받지 않는 뷰에 홈 화면 강제터치 이벤트 제작가능하나요??

0 추천
안녕하세요!
 
제가 지금 (ImageView) mCursorView 를 만들고 있습니다!
이 뷰의 패라메터는
mParams = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.WRAP_CONTENT,//w
    WindowManager.LayoutParams.WRAP_CONTENT,//h
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,//_type
    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,//_flags
    PixelFormat.TRANSLUCENT);//_format
 
입니다! 그렇기 때문에 홈 화면 위에 이 뷰를 띄우고
그 뷰를 누르는 등 터치이벤트를 주면, 그 뷰가 없는 것 처럼 홈화면이 반응하게 되는데요....
 
저는 여기에, 메크로 처럼
이 뷰의 위치에 dispatchTouchEvent()를 사용하여 강제로 터치이벤트를 발생하게 하려고 합니다!
다음과 같은 코드를 짰습니다!
 
dispatchTouch(x, y);//(x,y)에 터치이벤트 발생
 
private void dispatchTouch(int x, int y){
    // Obtain MotionEvent object
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    
    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(
        downTime, 
        eventTime, 
        MotionEvent.ACTION_UP, 
        x, 
        y, 
        metaState
    );
 
    // Dispatch touch event to view
    mCursorView.dispatchTouchEvent(motionEvent);//mParams를 갖고있는 위에서 언급된 그 뷰
}
 
그런데 이게 웬일! 터치 이벤트가 발생하지 않는 것이었습니다!
dispatchTouch()는 잘 실행되고 있었음에도 강제터치가 먹히지 않는것을 보니,
제 생각엔 이 뷰 패라미터 특성상 터치이벤트를 뒤로 넘기게끔 하는 것 같아서 그런것 같습니다!
 
 
그렇가면, 어떻게 해야 mCursorView뒤에 있는 홈 화면으로 dispatchTouchEvent를 실행시킬 수 있을까요??
dispatchEvent를 뷰에다 하는건 많은데, 홈 화면에다 하는건 구글링 해도 나오지 않더락구요 ㅠㅠㅠ
 
답변 달아주시면 정말 감사드리겠습니다!!!

 

레비튼 (320 포인트) 님이 2015년 6월 4일 질문

1개의 답변

0 추천
 
채택된 답변
자기 자신의 프로세스가 아닌 곳에 dispatchEvent 는 루팅하지 않으면 안됩니다.
Gradler (109,780 포인트) 님이 2015년 6월 4일 답변
레비튼님이 2015년 6월 4일 채택됨
감사합니다! 혹시 루트 권한을 얻은 후에 어떻게 해야 하는지 알 수 있을까요??
...