在 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 标志,但没有帮助。我需要触摸事件传递到系统。
在 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 文件中检查正在使用的所有清单权限。