android辅助功能服务ACTION_CLICK不适用于窗口覆盖

时间:2017-07-07 13:43:46

标签: android android-windowmanager accessibilityservice

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

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

注意:我是从其他服务运行的,而不是从辅助功能服务

运行

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

1 个答案:

答案 0 :(得分:1)

我认为这与叠加类型有关。特别是TYPE_PHONE。电话覆盖有特殊的机制来捕捉事件,这样用户就不会用他们的脸颊不小心触摸按钮,为什么要通过电话交谈。

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

TYPE_APPLICATION_OVERLAY

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

TYPE_SYSTEM_ALERT

这两项都需要以下许可:

SYSTEM_ALERT_WINDOW

此外,如果上述单独的解决办法,以下标志可能会有用:

FLAG_NOT_FOCUSABLE