我正在做一个供自己使用的小项目,我需要我的辅助功能服务来点击屏幕并向Netflix或youtube等视频播放器显示/隐藏控件。
因此,在我的accessibilityService中,我使用getRootInActiveWindow()
,并引用应用程序窗口(例如com.netflix mediaclient(
然后,我遍历所有节点并执行performAction(AccessibilityNodeInfo.ACTION_CLICK)
,但似乎没有一个节点是可单击的(当媒体播放器控件被隐藏时,否则我可以单击控件按钮(,并且我无法使媒体播放器控件显示。
你知道为什么会这样吗?此外,是否可以在一般屏幕上而不是在特定的AccessibilityNodeInfo上执行点击?
更新
事实证明,问题是ACTION_CLICK不能作为TOUCH工作,所以如果视图对触摸事件做出反应,但对点击事件没有反应,那么ACTION_CLICK将不会做任何事情。不幸的是,似乎没有办法对AccessibilityNodeInfo对象执行点击。
我无法通过辅助功能节点显示视频播放器控件,但我可以通过以下代码模拟屏幕上的点击来实现类似的效果。
private void click(int x, int y) {
Path path = new Path();
path.moveTo(x, y);
path.moveTo(x+10, y+10);
GestureDescription.Builder builder = new GestureDescription.Builder();
GestureDescription gestureDescription = builder.addStroke(new GestureDescription.StrokeDescription(path, 10, 200)).build();
dispatchGesture(gestureDescription, null, null);
}
然后我用类似300300 的东西调用点击功能
确保放置
android:canPerformGestures="true"
在您的AccessibilityService XML文件中。
我仍然很好奇为什么我不能在节点上实现同样的目标,所以如果有人知道的话,请告诉我。