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