2016-10-04 2 views
2

내가 오버레이보기 (있는 LinearLayout)가 PARAMS 설정 다음과 WindowManager에 추가 한 : "최근 통화"를는 오버레이 창에서 버튼을 눌러 다시 수행 - 안드로이드

private void setWindowParams(WindowManager.LayoutParams params) { 
    params.height = WindowManager.LayoutParams.WRAP_CONTENT; 
    params.width = WindowManager.LayoutParams.WRAP_CONTENT; 
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
    params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
     | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 
     | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
    params.format = PixelFormat.TRANSLUCENT; 
    params.gravity = Gravity.CENTER; 
} 

이있는 LinearLayout은 세 개의 버튼 "홈페이지"를 포함을 , "BACK"

휴대 전화의 뒤로 버튼을 누르면 윈도우 관리자에서이 오버레이보기를 제거하기 위해 onKeyEvent()을 구현했습니다.

내 오버레이 레이아웃에서 뒤로 버튼을 누르면 내 접근성 서비스에 전화하고 정상적으로 작동합니다. 이제 휴대 전화의 뒤로 버튼을 누르면 내 오버레이보기가 그대로 유지됩니다. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE이 플래그가 params에 설정되어 있으므로 키 이벤트가 수신되지 않기 때문입니다.

하지만이 플래그를 설정하지 않은 경우 오버레이에서 뒤로 버튼을 누르면 오버레이 자체가 숨겨지기보다는 오버레이 자체가 숨겨집니다.

휴대 전화의 뒤로 버튼을 눌러 내 오버레이를 숨기고 싶습니다. 또한 내 오버레이에서 뒤로 버튼을 누르면 뒤로 버튼 기능을 수행합니다.

performGlobalAction(MyAccessibilityService.ACTION_BACK)을 사용하여 실제 버튼 누름과 소프트웨어 버튼 누름을 구별 할 수있는 방법이 있습니까? 올바르게 구현하는 방법에 대한 제안 사항이 있으십니까?

답변

0

당신이 대화의 문맥이 활동이 살해 될 때 파괴되기 때문에, 당신은 UR 대응을위한 WindowManager

+0

감사를 사용할 수 있도록 할 수 없습니다. 내 질문에 두 번째 접근 방식으로 언급했다. 여전히 완벽하게 작동하지 않았습니다. –

+0

이 대화 상자를 제거하려면 [removeview] (https://developer.android.com/reference/android/view/ViewManager.html#removeView (android.view.View))를 사용하십시오. – user2423314

+0

희망 사항 ' 내 질문에 분명해. 나는 removeView()를 사용하여 윈도우에서 그것을 제거한다는 것을 알았다. 하지만 내 오버레이의 뒤로 버튼에 영향을주지 않고 시스템의 뒤로 버튼을 눌렀을 때 어떻게 호출해야하는지 알고 싶습니다. –

관련 문제