当我的手指触摸屏幕时自动点击停止

时间:2021-02-18 11:10:17

标签: android accessibilityservice

我使用 dispatchGesture 做了自动点击器,一切正常,但是当我用手指触摸屏幕时,它会停止并调用 onCancelled 方法

服务

public class MyService extends AccessibilityService {

    private Path path;
    private GestureDescription.Builder builder;
    private GestureDescription.StrokeDescription strokeDescription;
    private GestureResultCallback gestureResultCallback;
    private GestureDescription gestureDescription;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent.getBooleanExtra("isClicked", false)) {
            clickOnPosition();
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

    }

    @Override
    public void onInterrupt() {

    }

    private void clickOnPosition() {
        if (path == null) {
            path = new Path();
            path.moveTo(540, 960);
            path.lineTo(540, 960);
        }
        if (builder == null)
            builder = new GestureDescription.Builder();
        if (strokeDescription == null) {
            strokeDescription = new GestureDescription.StrokeDescription(path, 0, 500);
            builder.addStroke(strokeDescription);
        }
        if (gestureResultCallback == null)
            gestureResultCallback = new GestureResultCallback() {
                @Override
                public void onCompleted(GestureDescription gestureDescription) {
                    clickOnPosition();
                }

                @Override
                public void onCancelled(GestureDescription gestureDescription) {
                    super.onCancelled(gestureDescription);
                }
            };
        if (gestureDescription == null)
            gestureDescription = builder.build();
        dispatchGesture(gestureDescription, gestureResultCallback, null);
    }

}

MainActivity 中的按钮

public void click(View view) {
    if (intent == null) {
        intent = new Intent(this, MyService.class);
        intent.putExtra("isClicked", true);
        startService(intent);
    }
}

关于代码是好的代码还是有更好的方法来做这个???

1 个答案:

答案 0 :(得分:0)

我很惊讶您自己启动 AccessibilityService(在 click 方法中)...这种 Service 必须由系统自动启用、允许和启动,查看如何在 HERE 中声明。没有那个进程(系统自动启动,不是自己的调用)AccessibilityService 可能会像往常一样Service,导致没有权限执行 dispatchGesture(和所有其他敏感的方法调用),还有一些自定义 AccessibilityService 方法永远不会被调用,例如被覆盖,但为空 onAccessibilityEvent(...)