Back pressed events with system alert window

后端 未结 10 1523
南笙
南笙 2021-01-03 03:21

I need to dismiss system alert window on back pressed and home button event.I have tried with onKeyEvent but in vain. As we can\'t cap

10条回答
  •  一向
    一向 (楼主)
    2021-01-03 03:49

    I understand that you are using the permission for showing a floating view.

    Using a floating view you can intercept the back button press, but the home button press cannot be intercepted (android won't let you primarily because of security reasons).

    To intercept the back button press you need to add a wrapper when you inflate your floating view. Your wrapper should look like this:

        // Wrapper for intercepting System/Hardware key events
        ViewGroup wrapper = new FrameLayout(this) {
            @Override
            public boolean dispatchKeyEvent(KeyEvent event) {
                if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
                    hideAddNotesFloatingView();
                    return true;
                }
                return super.dispatchKeyEvent(event);
            }
        };
    

    Then you add it to your floating view as a root:

            mAddNoteFloatingView = mInflater.inflate(R.layout.floating_add_note, wrapper);
    

    My complete code looks like this:

    private void addFloatingView() {
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                0,
                PixelFormat.TRANSLUCENT);
    
        params.gravity = Gravity.CENTER | Gravity.LEFT;
        params.x = 0;
        params.y = 0;
    
        // Wrapper for intercepting System/Hardware key events
        FrameLayout wrapper = new FrameLayout(this) {
            @Override
            public boolean dispatchKeyEvent(KeyEvent event) {
                if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
                    // Add your code for handling the back button press
                    return true; // Return true means that the event was handled
                }
                return super.dispatchKeyEvent(event);
            }
        };
    
        mAddNoteFloatingView = mInflater.inflate(R.layout.floating_view, wrapper);
    
        mWindowManager.addView(mAddNoteFloatingView, params);
    }
    

提交回复
热议问题