回答
以下是一个可切换控制台展开/缩小的脚本示例,基于Hamibot API实现:
// 文档地址 https://docs.hamibot.com/
// 初始状态
let isExpanded = false;
const halfWidth = device.width / 2;
const halfHeight = device.height / 2;
// 创建悬浮窗按钮
ui.layout(
<vertical padding="10">
<button id="toggleBtn" text="展开控制台" w="100" h="40"/>
</vertical>
);
// 按钮点击事件
ui.toggleBtn.click(() => {
isExpanded = !isExpanded;
// 调整控制台尺寸
if (isExpanded) {
console.setSize(halfWidth, halfHeight);
console.setPosition(device.width - halfWidth - 10, 50);
ui.toggleBtn.setText("缩放控制台");
} else {
// 缩小到原始大小(示例值)
console.setSize(300, 200);
console.setPosition(100, 100);
ui.toggleBtn.setText("展开控制台");
}
});
// 初始设置
console.setSize(300, 200);
console.setPosition(100, 100);
console.show();
toast("点击悬浮按钮切换控制台尺寸");
功能说明:
- 创建悬浮窗按钮用于切换尺寸
- 默认尺寸为300x200像素
- 点击按钮切换状态:
- 展开状态:占屏幕宽度1/2高度1/2
- 缩小状态:恢复默认尺寸
- 控制台位置会自动调整到屏幕右侧
- 状态切换时按钮文字同步更新
使用方法:
- 确保已开启无障碍服务
- 运行脚本后会出现悬浮按钮
- 点击按钮即可切换控制台尺寸
注意:该脚本需要 Hamibot Pro 版本支持悬浮窗功能,部分设备可能出现控制台显示异常情况属于已知问题。
补充回答 1
以下是一个完整的自动化案例,包含UI交互、日志记录和设备控制功能:
// 文档地址 https://docs.hamibot.com/
// === 配置区域 ===
const CONFIG = {
LOG_PATH: "./logs/demo_log.txt", // 日志路径
MAX_LOG_SIZE: 1024 * 512, // 单个日志最大512KB
INTERVAL: 1000, // 操作间隔(毫秒)
CLICK_RADIUS: 50 // 点击区域半径
};
// === 初始化模块 ===
(function init() {
// 创建日志目录
const LOG_DIR = CONFIG.LOG_PATH.split("/").slice(0, -1).join("/");
if (!files.exists(LOG_DIR)) files.ensureDir(LOG_DIR);
// 初始化日志配置
console.setGlobalLogConfig({
file: CONFIG.LOG_PATH,
maxFileSize: CONFIG.MAX_LOG_SIZE,
rootLevel: "ALL"
});
})();
// === 日志工具 ===
function log(message, type = "INFO") {
const time = new Date().toLocaleString();
const entry = `[${time}] ${type} - ${message}\n`;
files.append(CONFIG.LOG_PATH, entry);
console.log(entry.trim());
}
// === UI控制 ===
ui.layout(
<vertical padding="10">
<text text={"设备型号:" + hamibot.robotName} textSize="16"/>
<text text={"脚本版本:v1.0"} textSize="14" textColor="#666"/>
<input id="loopInput" hint="输入循环次数(1-10)" inputType="number"/>
<checkbox id="clickBox" text="启用随机点击"/>
<checkbox id="swipeBox" text="启用区域滑动"/>
<button id="startBtn" text="启动脚本" style="Widget.AppCompat.Button.Colored"/>
</vertical>
);
// === 核心操作 ===
ui.startBtn.click(async () => {
const loopTimes = parseInt(ui.loopInput.text()) || 3;
const doClick = ui.clickBox.checked;
const doSwipe = ui.swipeBox.checked;
log(`开始执行任务,循环次数:${loopTimes}`);
auto.waitFor();
try {
for (let i = 1; i <= loopTimes; i++) {
log(`第${i}轮执行开始`);
if (doClick) {
const x = Math.random() * device.width;
const y = Math.random() * device.height;
gesture(1000, [x, y], [x + 10, y + 10]);
log(`随机点击坐标:(${x.toFixed(0)}, ${y.toFixed(0)})`);
}
if (doSwipe) {
const xStart = device.width/2 - CLICK_RADIUS;
const yStart = device.height/2 - CLICK_RADIUS;
gesture(1000,
[xStart, yStart],
[xStart + CLICK_RADIUS*2, yStart + CLICK_RADIUS*2]
);
log("执行区域滑动");
}
await new Promise(resolve => setTimeout(resolve, CONFIG.INTERVAL));
}
log("任务执行完成", "SUCCESS");
} catch (e) {
log("发生错误:" + e.message, "ERROR");
}
});
// === 悬浮控制 ===
const floatingBtn = floaty.button("🔧");
floatingBtn.setPosition(device.width - 100, 500);
floatingBtn.click(() => {
if (console.isVisible()) {
console.hide();
log("控制台已隐藏");
} else {
console.show();
log("控制台已显示");
}
});
// 清理函数
function exit() {
floatingBtn.close();
log("脚本已退出", "SYSTEM");
}
hamibot.on("exit", exit);
log("脚本初始化完成,请在UI界面配置参数");
toast("点击右下角🔧切换控制台显示");
功能说明:
-
配置管理:
- 日志配置集中管理(路径、大小、间隔)
- 支持设备适配(自动适配屏幕尺寸)
-
完整UI系统:
- 显示设备信息
- 输入框设置循环次数
- 复选框控制操作类型
- 彩色状态按钮
-
自动化核心:
- 随机点击生成
- 区域滑动模拟
- 异步等待控制
- 错误捕获处理
-
日志系统:
- 本地文件持久化
- 控制台同步输出
ℹ️ 本回答由 AI 生成,内容仅供参考