Невозможно передать клики / прикосновения к окнам ниже в приложении для Android - PullRequest
0 голосов
/ 30 июня 2019

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

В onCreate я вызываю:

checkDrawOverlayPermission();

Ниже приведен код для checkDrawOverlayPermission ().Намерение запускается для получения разрешения пользователя на запуск приложения в виде наложения:

public void checkDrawOverlayPermission() {
        /** check if we already  have permission to draw over other apps */
        if (!Settings.canDrawOverlays(this)) {
            /** if not construct intent to request permission */
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:" + getPackageName()));
            /** request permission via start activity for result */
            startActivityForResult(intent, REQUEST_CODE);
        }
    }

onActivityResult () раздел, как показано ниже:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
            ...

        case REQUEST_CODE:
            WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    0 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                    PixelFormat.TRANSLUCENT);
            params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
            params.gravity = Gravity.RIGHT | Gravity.TOP;
            WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
            wm.addView(imagePane, params);

            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Файл манифеста имеет следующую строку:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Для imagePane (ImageView), добавляемого в качестве представления для наложения, в файле activity_main.xml установлены следующие свойства:

android:background="@android:color/transparent"
android:scaleType="centerInside"
android:theme="@android:style/Theme.Translucent.NoTitleBar"

С помощью приведенного выше кода приложениеотображается в виде прозрачного окна на главном экране телефона.Однако щелчки или прикосновения не принимаются окнами под этим приложением.Я попытался запустить

imagePane.setEnabled (false);

Это отключает клики на панели изображений, но клики по-прежнему не принимаются окнами ниже этого приложения,Любая идея, как получить клики, которые будут получены окнами под приложением?

...