Android Overlay использует сенсорные события и передает их другим приложениям - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь нарисовать полноэкранный оверлей, который будет поглощать все сенсорные события и запускать некоторые действия при наступлении определенного сенсорного события.Например, вернуться назад, когда проведите пальцем влево. См. Это приложение

Я мог бы успешно показать оверлей со следующим кодом

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            TYPE_APPLICATION_OVERLAY,
            FLAG_WATCH_OUTSIDE_TOUCH| FLAG_NOT_TOUCH_MODAL| FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.LEFT | Gravity.TOP;
    windowManager.addView(pieControl, params);

    container.setOnTouchListener(new View.OnTouchListener() {...});

Макет выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">

<RelativeLayout
    android:id="@+id/pie"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent">

    <RelativeLayout
        android:id="@+id/parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/control"
            android:layout_width="25dp"
            android:layout_height="150dp"
            android:layout_centerInParent="true"
            android:background="@drawable/noname" />

        <ImageView
            android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:src="@drawable/arrow_left"/>
    </RelativeLayout>
</RelativeLayout>

Это успешно отрисовывает общесистемный оверлей, и я получаю все сенсорные события.Но сенсорные события не передаются другим приложениям и потребляются моим приложением.

Я не могу использовать флаг TYPE_SYSTEM_OVERLAY, так как я нацеливаюсь на Android 8.0.Я также попытался этот ответ , но он больше не будет работать, начиная с Android 8.0.

Я хочу использовать все события касания только для проверки жеста, сделанного пользователем, в противном случае онидолжен работать как обычное касание и делегировать другим приложениям.Что может быть не так?

РЕДАКТИРОВАТЬ

Есть подобный вопрос здесь , но у него нет ответа.Но я считаю, что это выполнимо, так как я видел приложения в Play Store, которые делают это.

...