触摸事件未传递到系统

问题描述 投票:0回答:1

在 Android 11 上一切正常,但在 Android 12 上遇到了困难。

我似乎无法使触摸事件通过窗口传递到系统。通过 logcat,我发现系统在我的窗口上设置了

FLAG_SLIPPERY
标志,这会阻止触摸事件传递到系统。

据我了解,这是一个安全标志,但我还没有找到禁用此标志的方法。

在 Realme 6 pro (Android 11) 上一切正常,但在 Motorola Edge 30 (Android 12) 上则不然。

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

canvasLayoutParams_vi.gravity = Gravity.TOP | Gravity.START;
canvasLayoutParams_vi.x = 0;
canvasLayoutParams_vi.y = 0;

vi = new EmptyView(this);
windowManager.addView(vi, canvasLayoutParams_vi);

错误本身:

Letterbox_left_ActivityRecord{606481 u0 com.MyApp/.MainActivity t377} has FLAG_SLIPPERY. Please report this in b/157929241

我尝试了不同的 LayoutParams 标志,但没有帮助。我需要触摸事件传递到系统。

java android
1个回答
0
投票

在 WindowManager.LayoutParams 中使用 FLAG_WATCH_OUTSIDE_TOUCH 这可以帮助您捕获外部的触摸事件

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

尝试这个并确保

targetSdkVersion 31

在你的 gradle 文件中检查正在使用的所有清单权限。

© www.soinside.com 2019 - 2024. All rights reserved.