OTG / USB 键鼠
更新: 2025/7/20 字数: 0 字 时长: 0 分钟
USB 模块提供了通过 USB 连接控制设备的接口,包括触摸操作、按键模拟、文本输入等功能。与 BLE 模块功能类似,但使用 USB 连接方式,通常具有更低的延迟和更高的稳定性。
导入USB模块
importClass("com.cloud.hid.USB");
初始化与连接
USB.init(context)
初始化 USB 控制器
参数:context
:Android 上下文对象
返回值:boolean
:初始化是否成功
示例:
var result = USB.init(context);
console.log('USB初始化结果:', result);
USB.connect()
连接 ESP32 设备
返回值:boolean
: 连接是否成功
示例:
var result = USB.connect();
console.log('连接结果:', result);
USB.restart()
重启 ESP32 设备
返回值:boolean
: 操作是否成功
示例:
var result = USB.restart();
console.log('重启结果:', result);
USB.onDestroy()
销毁 USB 控制器
示例:
USB.onDestroy();
console.log('USB控制器已销毁');
USB.state()
获取 ESP32 设备状态
返回值:boolean
: 设备状态
示例:
var state = USB.state();
console.log('设备状态:', state);
按键操作
USB.home()
模拟 HOME 主页键
返回值:boolean
: 操作是否成功
示例:
var result = USB.home();
console.log('HOME键操作结果:', result);
USB.back()
模拟 BACK 返回键
返回值:boolean
: 操作是否成功
示例:
var result = USB.back();
console.log('BACK键操作结果:', result);
USB.recents()
模拟最近任务键
返回值:boolean
: 操作是否成功
示例:
var result = USB.recents();
console.log('最近任务键操作结果:', result);
注意事项
输入法相关按键部分手机不兼容,建议使用Bot.js系统提供的脚本输入法以解决此问题。
USB.enter()
模拟 ENTER 回车键
返回值:boolean
: 操作是否成功
示例:
var result = USB.enter();
console.log('ENTER键操作结果:', result);
USB.selectAll()
全选操作
返回值:boolean
: 操作是否成功
示例:
var result = USB.selectAll();
console.log('全选操作结果:', result);
USB.screenshot()
截图操作
返回值:boolean
: 操作是否成功
示例:
var result = USB.screenshot();
console.log('截图操作结果:', result);
USB.cut()
剪切操作
返回值:boolean
: 操作是否成功
示例:
var result = USB.cut();
console.log('剪切操作结果:', result);
USB.copy()
复制操作
返回值:boolean
: 操作是否成功
示例:
var result = USB.copy();
console.log('复制操作结果:', result);
USB.paste()
粘贴操作
返回值:boolean
: 操作是否成功
示例:
var result = USB.paste();
console.log('粘贴操作结果:', result);
USB.input(str)
输入文本
参数:str
: 要输入的文本
返回值:boolean
: 操作是否成功
示例:
var result = USB.input("Hello cloud"); // 无法输入中文,可以用设置剪切板 setClip(text) + 粘贴键 USB.paste() 或者使用Bot.js系统提供的脚本输入法
console.log('输入操作结果:', result);
USB.delete([i])
删除操作
参数:i
(可选): 删除次数,默认为1
返回值:boolean
: 操作是否成功
示例:
var result = USB.delete(3); // 删除3次
console.log('删除操作结果:', result);
USB.backspace([i])
退格操作
参数:i
(可选): 退格次数,默认为1
返回值:boolean
: 操作是否成功
示例:
var result = USB.backspace(2); // 退格2次
console.log('退格操作结果:', result);
触摸操作
USB.touchDown(id, x, y)
按下触摸点
参数:
id
: 触摸点IDx
: X坐标y
: Y坐标
返回值:boolean
: 操作是否成功
示例:
var result = USB.touchDown(1, 100, 200);
console.log('按下触摸点结果:', result);
USB.touchMove(id, x, y)
移动触摸点
参数:
id
: 触摸点IDx
: X坐标y
: Y坐标
返回值:boolean
: 操作是否成功
示例:
var result = USB.touchMove(1, 150, 250);
console.log('移动触摸点结果:', result);
USB.touchUp(id)
抬起触摸点
参数:
id
: 触摸点ID
返回值:boolean
: 操作是否成功
示例:
var result = USB.touchUp(1);
console.log('抬起触摸点结果:', result);
USB.click(x, y)
点击坐标
参数:
x
: X坐标y
: Y坐标
返回值:boolean
: 操作是否成功
示例:
var result = USB.click(300, 500);
console.log('点击操作结果:', result);
USB.press(x, y, duration)
长按坐标
参数:
x
: X坐标y
: Y坐标duration
: 持续时间(毫秒)
返回值:boolean
: 操作是否成功
示例:
var result = USB.press(300, 500, 1000); // 长按1秒
console.log('长按操作结果:', result);
USB.swipeDetailed(startX, startY, endX, endY, steps, downTime, duration, upTime)
详细滑动操作
参数:
startX
: 起点X坐标startY
: 起点Y坐标endX
: 终点X坐标endY
: 终点Y坐标steps
: 滑动步数downTime
: 按下延迟(毫秒)duration
: 滑动持续时间(毫秒)upTime
: 抬起延迟(毫秒)
返回值:boolean
: 操作是否成功
示例:
var result = USB.swipeDetailed(100, 200, 300, 400, 10, 0, 500, 0);
console.log('详细滑动操作结果:', result);
USB.swipeShape(startX, startY, endX, endY, steps, downTime, duration, upTime, shape)
曲线滑动
参数:
startX
:起点 X 坐标startY
:起点 Y 坐标endX
:终点 X 坐标endY
:终点 Y 坐标steps
:滑动步数downTime
:按下延迟(毫秒)duration
:滑动持续时间(毫秒)upTime
:抬起延迟(毫秒)shape
:滑动形状(1-6)
返回值:
boolean
:操作是否成功
示例:
var result = USB.swipeShape(100, 200, 300, 400, 10, 0, 500, 0, 1);
console.log('USB曲线滑动操作结果:', result);
键盘操作
USB.keyPress(modifier, keyCode) / USB.keyPress(keyCode)
按键按下(必须得释放,否则可能导致后期按键异常)
参数:
modifier
: 修饰键keyCode
: 按键代码
或keyCode
: 按键代码
返回值:boolean
: 操作是否成功
示例:
var result1 = USB.keyPress(8, 40); // 模拟主页键
console.log('USB组合按键结果:', result1);
/* 通过按下+释放模拟截图键 */
var resultKeySingle = USB.keyPress(70);//按下必须得释放 否则可能导致后期按键异常)
console.log("单个键发送结果: " + resultKeySingle);
sleep(200)
var resultKeyRelease = USB.keyRelease(70);
console.log("释放键结果: " + resultKeyRelease);
USB.keyWrite(keyCode)
按键写入
参数:
keyCode
: 按键代码
返回值:boolean
: 操作是否成功
示例:
var result = USB.keyWrite(70); // 截屏键
console.log('USB按键写入结果:', result);
USB.keyRelease([keyCode])
按键释放
参数:
keyCode
(可选): 指定按键代码,不传则释放所有按键
返回值:boolean
: 操作是否成功
示例:
var result1 = USB.keyRelease(70); // 释放截屏键
console.log('USB释放指定键结果:', result1);
var result2 = USB.keyRelease(); // 释放所有按键
console.log('USB释放所有键结果:', result2);
完整示例代码
importClass("com.cloud.hid.USB");
/* 销毁 */
USB.onDestroy();
/* 初始化 */
var resultIsInit = USB.init(context);
console.log("初始化: " + resultIsInit);
/* 设置上下文(无返回值) */
USB.setContext(context);
/* 获取上下文 */
var resultUSBContext = USB.getContext(context);
console.log("获取上下文: " + resultUSBContext);
/* 连接默认设备 */
var resultIsConnected = USB.connect();
console.log("连接默认设备: " + resultIsConnected);
/* 重启ESP32设备 */
var resultIsRestarted = USB.restart();
console.log("重启: " + resultIsRestarted);
/* 当前状态 */
var resultState = USB.state();
console.log("USB 状态: " + resultState);
/* 基础按键操作 */
var resultBack = USB.back();
console.log("点击返回: " + resultBack);
var resultHome = USB.home();
console.log("点击主页: " + resultHome);
var resultRecents = USB.recents();
console.log("点击最近任务: " + resultRecents);
var resultEnter = USB.enter();
console.log("点击回车: " + resultEnter);
/* 输入操作 */
var resultInput = USB.input("adb123");
console.log("输入文字结果: " + resultInput);
/* 删除、退格操作 */
var resultDel = USB.delete();
console.log("删除1个字符: " + resultDel);
var resultDel3 = USB.delete(3);
console.log("删除3个字符: " + resultDel3);
var resultBackspace = USB.backspace();
console.log("退格1个字符: " + resultBackspace);
var resultBackspace3 = USB.backspace(3);
console.log("退格3个字符: " + resultBackspace3);
/* 粘贴复制剪切 */
var resultPaste = USB.paste();
console.log("粘贴: " + resultPaste);
var resultCopy = USB.copy();
console.log("复制: " + resultCopy);
var resultCut = USB.cut();
console.log("剪切: " + resultCut);
var resultSelectAll = USB.selectAll();
console.log("全选: " + resultSelectAll);
var result1 = USB.keyPress(8, 40); // 模拟主页键
console.log('USB组合按键结果:', result1);
/* 通过按下+释放模拟截图键 */
var resultKeySingle = USB.keyPress(70);
console.log("单个键发送结果: " + resultKeySingle);
sleep(200)
var resultKeyRelease = USB.keyRelease(70);
console.log("释放键结果: " + resultKeyRelease);
/* 模拟截图键 */
var resultKeyWrite = USB.keyWrite(70);
console.log("写键结果: " + resultKeyWrite);
/* 点击坐标 */
var resultClicked = USB.click(300, 400);
console.log("点击结果: " + resultClicked);
var resultPressed = USB.press(300, 400, 1000);
console.log("长按结果: " + resultPressed);
/* 滑动 */
var resultSwipe = USB.swipeShape(200, 500, 600, 500, 50, 200, 2000, 3000, 3);
console.log("形状滑动(SL)结果: " + resultSwipe);
USB 与 BLE 模块的主要区别
- 连接方式不同:USB 使用有线连接,BLE 使用蓝牙无线连接
- 性能差异:USB 通常具有更低的延迟,连接更稳定,不受无线干扰影响
- 功能差异:USB 的
screenshot()
方法使用不同的按键代码(USB: 70,BLE: 204) - 使用场景:对延迟敏感的操作推荐使用 USB,需要无线自由的场景使用 BLE
注意事项
- 使用 USB 模式需要确保设备已正确连接并授权 USB 调试权限
- 部分 Android 设备可能需要额外的 USB 权限配置
- 坐标参数需要根据实际屏幕分辨率进行调整
- USB 连接通常比 BLE 更稳定,适合高性能要求的场景