Не удается перехватить прикосновение к службе наложения - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь заблокировать касание на устройстве с помощью сервиса и прозрачного наложения. Кажется, что код отлично работает на android oreo, но не работает должным образом на устройствах, работающих под управлением android версии ниже oreo, код выглядит следующим образом:

private void setWindowParams(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    } else {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    }
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    FrameLayout noTouchUi = new FrameLayout(this);
    wm.addView(noTouchUi,params);

}

Здесь я настраиваю FrameLayout noTouchUi для перехватывать прикосновение как наложение с использованием сервиса, используя onTouchListener

        noTouchUi.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d(TAG,"touch event");
            return true;
        }
    });

, это работает правильно на Android 8, но не работает на android 7, наложение отображается правильно, но элементы, стоящие за наложение нажимается. я хочу заблокировать этот клик.

1 Ответ

0 голосов
/ 15 января 2020

Спасибо, повелители стека, я нашел ответ сам. изменив тип с WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY на WindowManager.LayoutParams.TYPE_PHONE и удалив флаги WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL и WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH сделали свое дело.

...