2012-07-03 3 views
1

현재 서비스에서 터치 이벤트를 수신하고 있습니다.서비스에서 터치 이벤트 수신

내가 생각한 한 가지 방법은 TouchDelegate를 시스템보기에서 사용하고 해당 경계를 화면으로 확장 한 다음 위임 내에서 터치 이벤트를받는 것입니다. 그러나

, 나는 내 서비스 내에서

((Activity)ctx).getWindow().getDecorView().setTouchDelegate(new TouchDel(bounds, view)); 

을 사용 나는 NullPointerException이와 힘 가까이를 얻을.

+0

혹시 이것에 대한 해결책을 찾았습니까? – Vlad

답변

1

Service은 시스템에서 터치 이벤트를 전체적으로 수신하기 위해 직접 등록 할 수있는 메커니즘이 없습니다. 애플리케이션의 UI가 Activity 인 경우받은 이벤트를 Service으로 전달해야합니다. 당신이 그들에게 갖고있는 구체적인 사용에 대해 더 많이 알지 못한다면 나는 일반적인 접근법만을 제안 할 수 있습니다. 당신의 Activity 클래스에서

  • 이 응용 프로그램에 전송 될 때 dispatchTouchEvent()은 각 이벤트의 통지를 오버라이드 (override) : 하나 개는 이러한 가능한 방법이 될 수 있습니다. 반환 동작을 재정의하지 않도록주의하십시오. 그러면 뷰에서 터치 처리가 중단됩니다.
  • MotionEventParcelable이므로 각 이벤트를 Intent에 패키지화하고 시작 명령으로 Service에 보낼 수 있습니다.
  • 번갈아서 Service을 바인딩 된 서비스로 구현하면 응용 프로그램의 각 Activity이 바인딩되어 메소드를 직접 호출하고 각각 MotionEvent이 그런 식으로 전달 될 수 있습니다.
+0

하지만 홈 화면과 같이 활동 외부에서 터치 이벤트를받는 것은 어떻습니까? 액티비티는 스크린이며 Activity.dispatchTouchEvent()는 해당 액티비티로만 전달되는 터치 이벤트를 반환하는 메서드입니다. 액티비티가 화면에서 꺼지 자마자 터치 이벤트를 계속받을 수 없습니다. – Denizen

+0

응용 프로그램의 컨텍스트 외부에서 이벤트를 수신하는 것은 안드로이드에서 의도적으로 지원되지 않습니다. 심지어 사용자 앞에 있지 않을 수도있는 서비스조차도 응용 프로그램 프로세스의 컨텍스트에 구속됩니다. 이러한 기능을 추가하려면 사용자 정의 ROM 이미지에서 Android 시스템 서비스/커널을 수정해야합니다. – Devunwired