android 无障碍服务 ACTION_CLICK 不适用于 window 覆盖

android accessibility service ACTION_CLICK doesn't work with window overlay

我正在尝试使用辅助功能单击强制停止按钮 service.when 我找到了强制停止按钮 我使用以下方法单击它:

childNodeView.performAction(AccessibilityNodeInfo.ACTION_CLICK);

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

这些是我的 window 经理参数:

 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); 

注意:我运行这是来自不同的服务,而不是来自无障碍服务

如何使用 window 叠加层执行点击?

我认为这与覆盖类型有关。具体来说 TYPE_PHONE。 Phone 叠加层有特殊的机制来捕获事件,这样用户就不会不小心用脸颊触摸按钮,为什么要在 phone 上说话。

你应该试试不同的类型。对于 Android O 尝试:

TYPE_APPLICATION_OVERLAY

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

TYPE_SYSTEM_ALERT

这两个都需要以下权限:

SYSTEM_ALERT_WINDOW

此外,如果以上方法无法解决问题,以下标记可能会有用:

FLAG_NOT_FOCUSABLE