gpt4 book ai didi

android - 为什么 ACTION_OUTSIDE 在 KitKat 4.4.2 上每次都返回 0?

转载 作者:太空狗 更新时间:2023-10-29 13:25:17 25 4
gpt4 key购买 nike

我实现了一个大小为 1 的窗口,并希望捕获 ACTION_OUTSIDE 事件。

mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(1,1,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);

我得到触发器并得到 ACTION_OUTSIDE 事件,但是在读取 event.getRawX()event.getRawY() 时,它们每次都返回 0。我用 Android 2.3.6 测试了同样的东西并且它有效。而且我找不到任何已弃用的内容。

这是 Android 问题还是有人知道解决方案?谢谢

最佳答案

Tniederm,我回答过类似的问题here以供引用,但我会在这里进行一些小的修改以重新散列:

翻遍源码,找到了问题的根源:

https://github.com/android/platform_frameworks_base/blob/79e0206ef3203a1842949242e58fa8f3c25eb129/services/input/InputDispatcher.cpp#L1417

// Check whether windows listening for outside touches are owned by the same UID. If it is
// set the policy flag that we will not reveal coordinate information to this window.
if (maskedAction == AMOTION_EVENT_ACTION_DOWN) {
sp<InputWindowHandle> foregroundWindowHandle =
mTempTouchState.getFirstForegroundWindowHandle();
const int32_t foregroundWindowUid = foregroundWindowHandle->getInfo()->ownerUid;
for (size_t i = 0; i < mTempTouchState.windows.size(); i++) {
const TouchedWindow& touchedWindow = mTempTouchState.windows[i];
if (touchedWindow.targetFlags & InputTarget::FLAG_DISPATCH_AS_OUTSIDE) {
sp<InputWindowHandle> inputWindowHandle = touchedWindow.windowHandle;
if (inputWindowHandle->getInfo()->ownerUid != foregroundWindowUid) {
mTempTouchState.addOrUpdateWindow(inputWindowHandle,
InputTarget::FLAG_ZERO_COORDS, BitSet32(0));
}
}
}
}

如果“外部触摸”到达的 View 与正在监听外部触摸的 View 不共享其 UID (read about it here),则事件调度程序会将其坐标设置为 0,0。这绝对是出于安全目的,但我不确定我是否看到了它旨在缓解的威胁的全部范围。您可以尝试查找旧版本的 InputDispatcher 以了解何时引入了此功能 - 我自己还没有看过。

如果你愿意的话,我打开了一个错误票。至少,文档需要包含此信息...我还想知道是否真的需要此安全功能。

Issue 72746: FLAG_WATCH_OUTSIDE_TOUCH doesn't return location for ACTION_OUTSIDE events on 4.2+

关于android - 为什么 ACTION_OUTSIDE 在 KitKat 4.4.2 上每次都返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com