回答
在Hamibot中创建可以返回值的方法非常简单,只需要使用JavaScript的函数定义并配合return语句即可。下面提供几个实用示例:
// 文档地址 https://docs.hamibot.com/
// 示例1:基本函数返回数值
function calculateSum(a, b) {
return a + b;
}
var total = calculateSum(5, 7);
toastLog("计算结果: " + total); // 显示"计算结果: 12"
// 示例2:返回字符串处理结果
function formatName(firstName, lastName) {
return "姓名: " + lastName + firstName;
}
var formatted = formatName("小明", "张");
toastLog(formatted); // 显示"姓名: 张小明"
// 示例3:返回对象
function createProfile(name, age) {
return {
name: name,
age: age,
isActive: true
};
}
var user = createProfile("李华", 25);
toastLog("用户: " + user.name + ", 年龄: " + user.age);
// 示例4:带条件判断的返回
function checkBatteryLevel() {
var level = device.getBattery();
if(level > 80) {
return "电量充足";
} else if(level > 30) {
return "电量中等";
} else {
return "电量不足,请充电";
}
}
注意事项:
- Hamibot使用Rhino 1.7.15引擎,不支持箭头函数、默认参数等ES6+特性
- 函数执行到return语句会立即返回,后续代码不会执行
- 可以返回任何数据类型:数字、字符串、对象、数组等
- 如果函数没有return语句,将返回undefined
在Hamibot脚本中,合理使用返回值函数可以提高代码的可读性和复用性,建议将常用功能封装成函数以便在多个地方调用。
补充回答 1
页面监控线程实现
要创建一个监控应用页面的线程,当在特定页面停留超过30秒时自动重启应用,可以使用以下代码:
// 文档地址 https://docs.hamibot.com/
/**
* 创建页面监控线程
* @param {String} appName 应用名称(如"微信")
* @param {String} targetId 目标页面特征ID(用于检测是否在该页面)
* @param {Number} timeout 超时时间(毫秒),默认30000
*/
function createPageMonitorThread(appName, targetId, timeout) {
timeout = timeout || 30000; // 默认30秒
var monitorThread = threads.start(function() {
var startTime = 0;
var onTargetPage = false;
while (true) {
try {
// 检测目标页面是否存在
var isOnTargetPage = false;
try {
// 使用findOne(1000)设置1秒超时,避免无限等待
isOnTargetPage = id(targetId).findOne(1000) !== null;
} catch (e) {
try {
// 如果ID检测失败,尝试使用文本检测
isOnTargetPage = text(targetId).findOne(1000) !== null;
} catch (e2) {
// 忽略异常
}
}
if (isOnTargetPage) {
if (!onTargetPage) {
// 首次进入目标页面,记录开始时间
startTime = new Date().getTime();
onTargetPage = true;
} else {
// 已经在目标页面,检查是否超时
var currentTime = new Date().getTime();
if (currentTime - startTime > timeout) {
// 超时,重启应用
restartApp(appName);
// 重置计时
startTime = currentTime;
}
}
} else {
// 不在目标页面
onTargetPage = false;
}
} catch (e) {
log("页面监控异常: " + e);
}
// 每秒检查一次
sleep(1000);
}
});
return monitorThread;
}
/**
* 重启指定应用
* @param {String} appName 应用名称
*/
function restartApp(appName) {
// 获取应用包名
var packageName = app.getPackageName(appName);
if (!packageName) {
toast("无法获取应用包名: " + appName);
return;
}
// 关闭应用
app.closeApp(packageName);
sleep(1000);
// 清理可能残留的进程
recents();
sleep(1000);
back();
// 重新启动应用
launchApp(appName);
sleep(3000);
toast("应用已重启: " + appName);
}
// 使用示例:监控微信聊天页面,超过30秒无操作则重启
var wechatMonitor = createPageMonitorThread(
"微信",
"com.tencent.mm:id/d5v", // 微信聊天页面特征ID
30000
);
// 如果需要监控多个条件的页面
var customMonitor = createPageMonitorThread(
"抖音",
function() {
// 自定义页面检测逻辑
try {
return id("com.ss.android.ugc.aweme:id/bmz").exists() &&
text("关注").exists();
} catch (e) {
return false;
}
},
30000
);
使用说明
-
基本用法:传入应用名称和页面特征ID,例如监控微信的聊天页面
createPageMonitorThread("微信", "com.tencent.mm:id/d5v"); -
高级用法:可以传入自定义检测函数,实现更复杂的页面判断
createPageMonitorThread("抖音", function() { return id("com.ss.android.ugc.aweme:id/bmz").exists() && text("关注").exists(); }); -
注意事项:
- 确保你使用的ID或文本确实是目标页面的特征元素
- 页面特征ID可以通过Hamibot的"控件捕获"功能获取
- 该线程会持续运行,直到脚本结束
- 如果需要停止监控,可以使用
monitorThread.interrupt()
-
兼容性说明:
- 代码兼容Hamibot的Rhino 1.7.15引擎
- 不使用ES6+特性(如箭头函数、默认参数等)
- 使用
findOne(1000)设置超时避免无限等待
这个实现可以有效监控应用页面状态,防止应用在特定页面长时间无响应,特别适用于需要保持应用活跃状态的自动化场景。
ℹ️ 本回答由 AI 生成,内容仅供参考