2017-05-21 9 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です。私は他のアプリを防ぐWindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH flagsだけget key eventsにする必要があります。だから、正しいコードは

//サービスコード

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); 
に従っています