【问题标题】:android accessibility service ACTION_CLICK doesn't work with window overlayandroid 无障碍服务 ACTION_CLICK 不适用于窗口覆盖
【发布时间】:2017-07-10 11:12:19
【问题描述】:

我正在尝试使用辅助功能服务单击强制停止按钮。当我找到强制停止按钮时,我使用以下方法单击它:

childNodeView.performAction(AccessibilityNodeInfo.ACTION_CLICK);

这在普通情况下是成功的,但是当我尝试使用窗口管理器覆盖向用户隐藏进程时,单击不起作用。这可能是因为我尝试单击的按钮上方有一个屏幕,但是 Play 商店中有几个应用程序具有所描述的带有窗口覆盖的功能

这些是我的窗口管理器参数:

 WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            PixelFormat.TRANSLUCENT);


    params.gravity = Gravity.TOP | Gravity.START;
    oneTapProgressView = new OneTapProgressView(this);
    windowManager.addView(oneTapProgressView, params); 

注意:我从不同的服务而不是无障碍服务运行它

如何使用窗口叠加执行点击?

【问题讨论】:

    标签: android android-windowmanager accessibilityservice


    【解决方案1】:

    我相信这与覆盖类型有关。特别是 TYPE_PHONE。电话覆盖有特殊的机制来捕获事件,这样用户就不会不小心用脸颊触摸按钮了。

    您应该尝试其他类型。对于 Android O 尝试:

    TYPE_APPLICATION_OVERLAY
    

    对于您想要的以前的操作系统:

    TYPE_SYSTEM_ALERT
    

    这两个都需要以下权限:

    SYSTEM_ALERT_WINDOW
    

    此外,如果仅靠上述方法无法解决问题,以下标志可能会很有用:

    FLAG_NOT_FOCUSABLE
    

    【讨论】:

    • 感谢它有效!还要感谢 O 中 TYPE 变化的提醒。
    • 后续问题:可访问性仅适用于我的 FLAG_NOT_FOCUSABLE。此标志取消覆盖视图中的所有点击侦听器。有没有办法在设置了 FLAG_NOT_FOCUSABLE 的情况下处理覆盖视图中的点击事件?
    • 没有。但是我很难推荐替代方案,因为看到可访问性内容正常工作而不是其他情况的情况会让我感到困惑。有没有一款应用可以在 Google Play 上展示您想要的行为?
    • 1.我犯了一个编程错误,实际上我的覆盖视图中的视图是可点击的(使用 setOnClickListener offcourse) 2. 有很多应用程序具有此功能,主要是点击设置屏幕的应用程序 3. 单击覆盖窗口的目的是让用户能够在时间过长时取消该功能的操作,如果覆盖窗口显示时间过长,不要阻止他的手机
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2016-09-25
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多