2017-05-21 25 views
0

내 앱에서 서비스로 overlay window을 표시하고 있습니다. press back button 일 때 창을 숨기려고합니다. 그래서 back button pressed 호출 결코 back button event 나는 다음과 같은 코드를 할Android의 오버레이 창에서 BACK 버튼 콜백

class MyView extends MyLayout{ 
    public MyView(Context context){ 
     super(context); 
     LayoutInflater.from(context).inflater(R.layout.my_view,this); 
    } 
} 

Class MyLayout extends FrameLayout{ 
    public MyLayout(Context context){ 
     super(context); 
    } 

    @Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     Log.e("key event", "" + event.getKeyCode()); 
     return super.dispatchKeyEvent(event); 
    } 
} 
//service code 
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 
         | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | 
       WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, 
       PixelFormat.TRANSLUCENT); 

final MyView myview = new MyView(this); 
windowManager.addView(myview,param); 

그러나 dispatchKeyEvent 방법을 얻을 수 있습니다. 나는 인터넷 검색을하고 이것은 뒤로 버튼 이벤트를 캡처하는 방법임을 알게되었습니다. 어떻게 든 내 사건에는 효과가 없어. 내가 뭘 놓치고 있니?

답변

0

그냥 back button pressed 이벤트 사용을 캡처 할 경우

@override 
public void onBackPressed(){ 
// Do what you need done here 
// ... or pass super.onBackPressed(); 
} 
0

진짜 문제는 window params입니다. get key events에 다른 앱을 막는 경우에만 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH flags해야합니다. 그래서 올바른 코드는

// 서비스 코드

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | 
       WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, 
       PixelFormat.TRANSLUCENT); 
을 따르고