android 7.0 辅助服务部分节点不能点击问题

网上介绍文章:

https://blog.csdn.net/qq_24641847/article/details/77683826?locationNum=3&fps=1

自己在写一个项目的时候,发现7.0 和 6.0 的有差别,同样的代码6.0 能点击但到了7.0就不能点击。

知乎看到了:

(1)这个问题不是android 7的问题,AccessibilityService 可监听 点击事件,但通过ontouch实现的点击事件,是获取不到的。

(2)微信包括淘宝,一些重要的点击功能 不想让AccessibilityService监听到,就通过ontouch实现了,避免一些人搞灰色应用。

(3)这时候还想获取的话,需要root再通过app_process即可实现点击,这个方式比较更稳定,如果实现了,扩展比较强。我刚好做完了,可用。

(4)AccessibilityService 个人觉得功能很有限,所以需要一些辅助手段来完善

应该不是2点导致,因为同样代码在同一个版本的APP在不同操作系统却效果不一样,可能是还是系统版本导致的吧。

然后我就找到上面链接文章,那个文章说明,7.0 android系统引入新的api:


boolean dispatchGesture (GestureDescription gesture, AccessibilityService.GestureResultCallback callback, Handler handler)

这个API就强大,可以在非ROOT实现模拟手势,那么就可以模拟点击,滑动。只能说66666。那么7.0 手机可以实现非ROOT实现远程控制,那么teamview ,向日葵应该会使用该技术吧,因为以前模拟点击都是需要ROOT,ROOT就会丢掉一批用户。

其实7.0之前非ROOT也可以通过辅助实现简单远程操作,只是会比较复杂一点,因为要把坐标转换辅助服务的结点进行点击,不过转换起来也不是很难,这个就跟界面开发点击事件转换成按钮时间是一样的逻辑。

我的测试代码:

Log.d(TAG, "printTree: bound:" + rect);
Point position = new Point(rect.left+10, rect.top + 10);
GestureDescription.Builder builder = new GestureDescription.Builder();
Path p = new Path();
p.moveTo(position.x, position.y);
builder.addStroke(new GestureDescription.StrokeDescription(p, 0L, 100L));
GestureDescription gesture = builder.build();
boolean isDispatched = dispatchGesture(gesture, new GestureResultCallback() {
    @Override
    public void onCompleted(GestureDescription gestureDescription) {
        super.onCompleted(gestureDescription);
        Log.d(TAG, "onCompleted: 完成..........");
    }

    @Override
    public void onCancelled(GestureDescription gestureDescription) {
        super.onCancelled(gestureDescription);
        Log.d(TAG, "onCompleted: 取消..........");
    }
}, null);

 android 辅助其实越来越强大,可以做很多有用功能,但不知道未来google会不会做限制。


http://www.xiaoyutang.net/wordpress/?p=70


你可能感兴趣的:(android 7.0 辅助服务部分节点不能点击问题)