如何使用 try catch语法

已存档
wrekemdkwh · 2 个月前
第 1 条补充
·
2 个月前

events.observeKey();
// 拦截音量上键(避免系统弹出音量调节框)
events.setKeyInterceptionEnabled('volume_up', true);

// 监听音量上键按下事件
events.onKeyDown('volume_up', function() {
log('检测到音量加键按下,脚本即将停止');
exit(); // 立即停止脚本执行
});

监听到电源键就停止脚本并且贯穿脚本始终

第 2 条补充
·
2 个月前

// 开始监听物理按键
events.observeKey();
// 拦截音量上键(避免系统弹出音量调节框)
events.setKeyInterceptionEnabled('volume_up', true);

// 监听音量上键按下事件
events.onKeyDown('volume_up', function() {
log('检测到音量加键按下,脚本即将停止');
exit(); // 立即停止脚本执行
});

无法停止脚本,重新给一个方法

回答

Hamibot AI
1
· 2 个月前

在Hamibot中,你可以使用标准的JavaScript try-catch语法来处理异常。Hamibot使用的Rhino 1.7.15引擎支持基本的错误处理结构,但不支持箭头函数等现代特性。

// 文档地址 https://docs.hamibot.com/

基本语法:

try {
    // 可能会出错的代码
} catch (error) {
    // 处理错误
    console.error("发生错误: " + error.message);
} finally {
    // 无论是否出错都会执行的代码(可选)
}

具体使用示例:

  1. 处理UI操作可能发生的异常
try {
    // 尝试点击某个元素,可能因为元素不存在而失败
    id("com.example:id/button").findOne().click();
} catch (error) {
    console.error("点击失败: " + error.message);
    // 可以在这里执行备用方案
}
  1. 处理需要特定Android版本的功能
try {
    requiresApi(24); // 需要Android 7.0以上
    // 只有在满足API级别时才会执行的代码
    console.log("当前系统版本满足要求");
} catch (error) {
    console.log("系统版本太低,无法执行此功能");
    // 可以选择退出脚本或使用替代方案
    hamibot.exit();
}
  1. 特别注意:关于hamibot.exit()的异常处理
    根据Hamibot文档,hamibot.exit()是通过抛出ScriptInterrupttedException实现的。如果你在try-catch中捕获了这个异常,脚本不会立即停止:
try {
    hamibot.exit(); // 试图停止脚本
} catch (error) {
    console.log("exit()的异常被捕获了");
    // 脚本不会立即停止,会继续执行后面的代码
}
console.log("这段代码仍会执行");
  1. 最佳实践:记录详细错误信息
try {
    // 复杂操作
    waitForPackage("com.example.app");
    id("button_id").findOne(2000).click();
} catch (error) {
    console.error("错误详情:");
    console.error("错误类型: " + error.name);
    console.error("错误信息: " + error.message);
    console.error("堆栈信息: " + error.stack);
    // 发送错误报告
    hamibot.postMessage({
        type: "error",
        message: error.message,
        stack: error.stack
    });
}

记住,良好的错误处理能提高脚本的稳定性和可靠性,特别是在处理UI自动化时,因为界面元素可能随时变化或不可用。


补充回答 1

要监听电源键并在检测到按下时停止脚本,你需要修改按键名称为'power'并确保正确设置按键屏蔽。以下是完整实现代码:

// 文档地址 https://docs.hamibot.com/
events.observeKey();
// 拦截电源键(避免系统弹出锁屏或关机菜单)
events.setKeyInterceptionEnabled('power', true);

// 监听电源键按下事件
events.onKeyDown('power', function() {
log('检测到电源键按下,脚本即将停止');
exit(); // 立即停止脚本执行
});

这个脚本会:

  1. 启用按键监听功能(需要无障碍服务已开启)
  2. 屏蔽电源键的默认系统行为(防止弹出锁屏/关机菜单)
  3. 持续监听电源键按下事件,一旦检测到按下就记录日志并终止脚本

注意:

  • 该功能需要安卓4.3以上系统
  • 必须启用Hamibot的无障碍服务才能正常工作
  • 脚本退出时会自动解除按键屏蔽
  • 电源键的按键名称在Hamibot中固定为'power'

这个监听会贯穿脚本整个生命周期,只要脚本在运行就能响应电源键事件。当用户按下电源键时,脚本会立即停止执行,不会触发系统的锁屏或关机操作。


补充回答 2

// 文档地址 https://docs.hamibot.com/
// 增强版物理按键停止脚本(兼容性更好)

// 确保无障碍服务已启用
auto.waitFor();

// 启用按键监听(必须放在最前面)
events.observeKey();

// 设置按键拦截(必须在监听前设置)
events.setKeyInterceptionEnabled('volume_up', true);
events.setKeyInterceptionEnabled('volume_down', true);

// 添加初始化确认日志
log('✅ 按键监听已启动,音量键已屏蔽');

// 实现更可靠的停止机制
function stopScript() {
log('🛑 检测到停止按键,正在终止脚本...');
// 尝试多种停止方式确保生效
try {
engines.myEngine().forceStop();
} catch (e) {
exit();
}
}

// 监听音量上键(主停止键)
events.onKeyDown('volume_up', function(event) {
log('🔼 检测到音量上键按下');
stopScript();
});

// 监听音量下键(备用停止键)
events.onKeyDown('volume_down', function(event) {
log('🔽 检测到音量下键按下');
stopScript();
});

// 添加错误处理确保监听持续有效
events.on('error', function(e) {
log('⚠️ 按键监听错误: ' + e);
// 出错后尝试重新启用监听
try {
events.observeKey();
} catch (reconnectErr) {
log('❌ 无法恢复按键监听: ' + reconnectErr);
}
});

// 添加脚本生命周期确认
events.on('exit', function() {
log('⏹️ 脚本已成功终止');
// 确保解除按键屏蔽
events.setKeyInterceptionEnabled(false);
});

// 添加持续运行标识
setInterval(function() {
// 保持脚本活跃状态
}, 60000);

log('⏳ 脚本持续运行中,按下音量键可停止');

这个改进版方案:

  1. 首先确保无障碍服务已启用(auto.waitFor())
  2. 采用双重停止机制(engines.myEngine().forceStop() + exit())
  3. 同时监听音量上下键作为主备停止键
  4. 添加了错误处理和自动恢复机制
  5. 设置了脚本生命周期确认
  6. 使用setInterval保持脚本活跃状态

如果仍然无法停止,请检查:

  • 是否已授予Hamibot无障碍服务权限
  • 设备是否有厂商定制系统限制(如小米的MIUI、华为的EMUI可能需要额外设置)
  • 尝试重启Hamibot服务后再运行脚本
ℹ️ 本回答由 AI 生成,内容仅供参考