Search code examples
androidandroid-windowmanageronbackpressed

How to detect keyup and keydown event in service


I have a CustomView which extends LinearLayout , I am adding it to screen using WindowManager.addView() method to detect key event in my service with following layout param flags

  LinearLayout mLinear = new LinearLayout(getApplicationContext()) {
        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            super.dispatchKeyEvent(event);
            Log.i(TAG, "event");

            int action = event.getAction();
            int keyCode = event.getKeyCode();
            switch (keyCode) {

                case KeyEvent.KEYCODE_VOLUME_UP:
                    Log.i("Key", "VolumeUp");

                    return true;
                case KeyEvent.KEYCODE_VOLUME_DOWN:
                   Log.i("Key", "VolumeDown");
                    return true;

                case KeyEvent.KEYCODE_BACK:
                    Log.d(TAG, " " + "KEYCODE_BACK");

                    return false;

                default:
                    return true;
            }

        }

    };

    mView = LayoutInflater.from(this).inflate(R.layout.volume_service_layout, mLinear);
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);


    if (mView.getVisibility() == View.VISIBLE)
        flag =  WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING ;


    //params
    params = new WindowManager.LayoutParams(
            100,
            100,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
    wm.addView(mView, params);

}

dispatchKeyEvent() is override in customview class,but after adding it to windows back press Button not working.When I am adding WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE flag backpress button working fine,I am unable to detect keyup and keydown event.

I want to detect keyup or keydown event in service class. Please suggest any solution for this problem.


Solution

  • Android doesn't document APIs on interacting with volume buttons in that case. So I think.Its not possible