当我们需要通过无障碍服务模拟多指滑动手势时,必备函数
环境
- AutojsPro9.3.11
- 小米10Pro
- 安卓13
以上是我在写脚本时的环境,写过Autojs脚本的人都知道基本是通用的!
场景
- 滑动验证
- 游戏
- 多指手势切换
这个函数通常使用在滑动验证、游戏脚本时,需要多指进行操作,就可以通过这个函数进行操作了。
功能
使用该函数全程不会断触,并且可以实现多指错开时间进行操作,真实模拟了人工的操作!
代码
/**
* 执行多指滑动手势
* @param {Array} fingers 手指路线数组,每项为:
* { path: [[x,y],[x,y],...], duration: 5000, startTime: 0 }
* @param {Object} [options] 可选:designWidth, designHeight, silent
* @returns {boolean} 是否成功分发手势
*
* @example
* dispatchMultiFingerGesture([
* { path: [[200,600],[500,900],[200,1200]], duration: 5000, startTime: 0 },
* { path: [[400,600],[700,900],[400,1200]], duration: 5000, startTime: 1000 }
* ]);
*/
function dispatchMultiFingerGesture(fingers, options) {
var opts = Object.assign({}, DEFAULT_OPTIONS, options || {});
setScreenMetrics(opts.designWidth || device.width, opts.designHeight || device.height);
if (!Array.isArray(fingers) || fingers.length === 0) {
if (!opts.silent) toastLog("fingers 必须为非空数组");
return false;
}
var Path = android.graphics.Path;
var StrokeDescription =
android.accessibilityservice.GestureDescription.StrokeDescription;
var Builder = android.accessibilityservice.GestureDescription.Builder;
var builder = new Builder();
for (var i = 0; i < fingers.length; i++) {
var finger = fingers[i];
var pts = finger.path;
var duration = finger.duration != null ? finger.duration : 5000;
var startTime = finger.startTime != null ? finger.startTime : 0;
if (!Array.isArray(pts) || pts.length < 2) {
if (!opts.silent) toastLog("第" + (i + 1) + "指 path 至少需要 2 个点");
return false;
}
var path = new Path();
path.moveTo(pts[0][0], pts[0][1]);
for (var j = 1; j < pts.length; j++) {
path.lineTo(pts[j][0], pts[j][1]);
}
var stroke = new StrokeDescription(path, startTime, duration);
builder.addStroke(stroke);
}
var gesture = builder.build();
var service = auto.service;
if (!service) {
if (!opts.silent) toastLog("无障碍服务未就绪,请先开启无障碍");
return false;
}
try {
var ok = service.dispatchGesture(gesture, null, null);
if (!opts.silent) {
toastLog(ok ? "多指手势完成" : "手势分发被拒绝");
}
return ok;
} catch (err) {
if (!opts.silent) toastLog("dispatchGesture 失败: " + err);
return false;
}
}
测试
dispatchMultiFingerGesture([
{ path: [[200, 600], [500, 900], [200, 1200], [200, 600]], duration: 5000, startTime: 0 },
{ path: [[400, 600], [700, 900], [400, 1200]], duration: 5000, startTime: 800 },
{ path: [[900, 600], [700, 900], [900, 1200]], duration: 6000, startTime: 1300 }
]);
觉得好用就收藏吧!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END









![表情[aoman]-五云学习](https://www.wuyunai.com/wp-content/themes/zibll/img/smilies/aoman.gif)





暂无评论内容