Android AccessibilityService dispatchGesture
一、dispatchGesture方法
1.申请权限
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"tools:ignore="ProtectedPermissions" />
2.使用
public class MyAccessibilityService extends AccessibilityService {@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {// 处理辅助功能事件}@Overridepublic void onInterrupt() {// 辅助功能中断时执行的操作}private void performGesture() {AccessibilityService.GestureResultCallback callback = new AccessibilityService.GestureResultCallback() {@Overridepublic void onCompleted(GestureDescription gestureDescription) {super.onCompleted(gestureDescription);// 手势完成时执行的操作}@Overridepublic void onCancelled(GestureDescription gestureDescription) {super.onCancelled(gestureDescription);// 手势取消时执行的操作}};Path path = new Path();// 定义手势路径path.moveTo(100, 100);path.lineTo(300, 300);path.lineTo(500, 100);path.lineTo(700, 300);GestureDescription.Builder builder = new GestureDescription.Builder();// 设置手势路径和开始时间GestureDescription gestureDescription = builder.addStroke(new GestureDescription.StrokeDescription(path, 0, 100)).build();// 发送手势事件dispatchGesture(gestureDescription, callback, null);}
}
在上面的示例中,我们创建了一个名为MyAccessibilityService的AccessibilityService,并在performGesture方法中使用dispatchGesture方法发送手势事件。我们首先创建一个GestureDescription.Builder对象,并使用addStroke方法设置手势的路径和开始时间。然后,我们创建一个GestureDescription对象,并使用dispatchGesture方法发送手势事件。在GestureResultCallback回调方法中,我们可以处理手势完成和手势取消时的操作。
3.小案例
heightPixels是屏幕的高度,widthPixels是屏幕的宽度
3.1 回到首页
path.moveTo(widthPixels / 2, heightPixels - 10); // 起始点坐标
path.lineTo(widthPixels / 2, heightPixels / 2); // 终止点坐标
3.2 返回
path.moveTo(widthPixels - 10, heightPixels / 2); // 起始点坐标
path.lineTo(widthPixels / 5, heightPixels / 2); // 终止点坐标
3.3 下拉状态栏
path.moveTo(10, 10); // 起始点坐标
path.lineTo(10, heightPixels / 4 - 10); // 终止点坐标
3.4 点击某个点
path.moveTo(widthPixels / 2, heightPixels / 2); // 起始点坐标
4.注意
- 如果有不生效的,建议把起始坐标和终止坐标的差设置的大一点
- 手机屏幕左上角坐标为(0,0), 右下角则为分辨率最大值,比如手机分辨率为1080*1920 ,则右下角是 (1080,1920)。