Android 安卓易访问性服务行动';不能使用窗口覆盖

Android 安卓易访问性服务行动';不能使用窗口覆盖,android,android-windowmanager,accessibilityservice,Android,Android Windowmanager,Accessibilityservice,我正在尝试使用辅助功能服务单击强制停止按钮。当我找到强制停止按钮时,我使用以下方法单击它: childNodeView.performAction(AccessibilityNodeInfo.ACTION_CLICK); 这在普通场景中是成功的,但是当我尝试使用窗口管理器覆盖向用户隐藏进程时,单击不起作用。这可能是因为我试图单击的按钮上方有一个屏幕,但是play store上有几个应用程序具有所述的窗口覆盖功能 以下是我的窗口管理器参数: WindowManager.LayoutParams

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

childNodeView.performAction(AccessibilityNodeInfo.ACTION_CLICK);
这在普通场景中是成功的,但是当我尝试使用窗口管理器覆盖向用户隐藏进程时,单击不起作用。这可能是因为我试图单击的按钮上方有一个屏幕,但是play store上有几个应用程序具有所述的窗口覆盖功能

以下是我的窗口管理器参数:

 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 O,请尝试:

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

TYPE_SYSTEM_ALERT
这两项都需要以下许可:

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

FLAG_NOT_FOCUSABLE

谢谢,这很有效!还感谢您在O中提供了关于类型更改的提示。后续问题:可访问性仅在FLAG_NOT_可聚焦于我时才起作用。此标志取消覆盖视图中的所有单击侦听器。有没有一种方法可以处理覆盖视图中的点击事件,并设置标志“不可聚焦”?没有。但我很难推荐替代方案,因为如果看到可访问性功能正常工作而不是其他功能,我会感到困惑。是否有一个应用程序可以展示你在Google Play上想要的行为?1。我犯了一个编程错误,实际上我的覆盖视图中的视图是可点击的(当然是setOnClickListener)2。有很多应用程序具有此功能,主要是点击设置屏幕3的应用程序。单击覆盖窗口的目的是让用户能够在覆盖窗口显示时间过长时取消该功能的操作,而不是阻止其手机