首先在xml中增加配置
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:canPerformGestures="true"
android:description="@string/accessibility_description"
android:notificationTimeout="100" />
重点是 android:canPerformGestures="true"
具体代码
@RequiresApi(api = Build.VERSION_CODES.N)
public static boolean clickByNode(AccessibilityService service, AccessibilityNodeInfo nodeInfo) {
if (service == null || nodeInfo == null) {
return false;
}
Rect rect = new Rect();
nodeInfo.getBoundsInScreen(rect);
int x = (rect.left + rect.right) / 2;
int y = (rect.top + rect.bottom) / 2;
Point point = new Point(x, y);
GestureDescription.Builder builder = new GestureDescription.Builder();
Path path = new Path();
path.moveTo(point.x, point.y);
builder.addStroke(new GestureDescription.StrokeDescription(path, 0L, 100L));
GestureDescription gesture = builder.build();
boolean isDispatched = service.dispatchGesture(gesture, new AccessibilityService.GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
super.onCompleted(gestureDescription);
// LogUtil.d(TAG, "dispatchGesture onCompleted: 完成...");
}
@Override
public void onCancelled(GestureDescription gestureDescription) {
super.onCancelled(gestureDescription);
// LogUtil.d(TAG, "dispatchGesture onCancelled: 取消...");
}
}, null);
return isDispatched;
}
如果执行到 onCancelled 里,表示失败,需要看看xml是否配置成功