回答
在设备唤醒并上滑进入解锁界面(如密码/PIN输入界面)后,Hamibot可以通过以下几种方式获取键盘按键控件并点击。但首先,一个重要的前提是:Android系统出于安全考虑,通常会在锁屏界面限制无障碍服务的功能,这可能导致Hamibot无法正常访问或操作锁屏界面上的控件。如果你的设备或ROM允许无障碍服务在锁屏下运行,或者你的自动化场景是绕过锁屏(例如在设备已解锁状态下模拟输入),那么以下方法有效。
主要方式:
1. 基于控件的定位(首选,若可用)
这是最直接和高效的方法,通过分析控件的属性(如文本、描述、类名)来定位并点击。
- 实现思路:
1. 使用Hamibot的“布局分析”功能(通过悬浮窗进入)查看解锁界面键盘上每个按键控件的属性。
2. 根据控件的独特属性构建选择器。例如,数字键盘上的按键通常是一个`Button`或`TextView`,其`text`属性就是显示的数字(如“1”、“2”)。
- 核心代码示例:
// 文档地址 https://docs.hamibot.com/
auto.waitFor(); // 等待无障碍服务开启
// 示例:点击数字“1”的按键
// 假设通过布局分析发现“1”按键的text属性就是"1"
var keyOne = text("1").findOne(1000); // 在1秒内查找文本为“1”的控件
if (keyOne) {
keyOne.click(); // 找到则点击
toast("已点击按键 1");
} else {
toast("未找到按键 1");
}
// 如果text属性不唯一或为空,可能需要结合其他属性,如className和clickable
// 例如:className("android.widget.Button").clickable(true).text("1").findOne().click();
2. 基于图像识别的定位(备选,更通用)
当控件无法通过属性准确定位(例如某些自定义锁屏界面)时,可以通过图像识别来定位按键在屏幕上的坐标,然后执行点击。
- 实现思路:
1. 截取屏幕。
2. 使用Hamibot的`images`模块,通过`findMultiColors`等函数,根据按键的颜色特征或模板进行匹配,找到其坐标。
- 核心代码示例:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
toast('没有授予屏幕截图权限');
hamibot.exit();
}
sleep(500); // 稍等界面稳定
var img = captureScreen();
// 假设我们要找屏幕上颜色为白色(#FFFFFF)的“1”字,其背景主色为#AAAAAA
// 你需要先用取色工具确定目标点的具体颜色值
var point = images.findMultiColors(img, '#AAAAAA', [
[5, 10, '#FFFFFF'], // 相对于主色点的偏移位置和颜色
[10, 5, '#FFFFFF']
], {
region: [0, 1000, 1080, 500], // 限定在屏幕下部分区域搜索,提升效率
threshold: 4 // 颜色相似度阈值
});
if (point) {
click(point.x, point.y);
toast('通过图像识别点击了按键');
} else {
toast('未找到目标图像');
}
总结与建议
- 首选尝试控件定位:如果无障碍服务能在解锁界面工作,且控件属性可获取,此方法速度最快、最可靠。
- 备选图像识别:当控件属性不可用时,图像识别是通用的解决方案,但速度相对较慢,且对屏幕分辨率、主题颜色变化敏感。
- 关键限制:务必先确认你的设备和系统允许无障碍服务在锁屏界面下正常运行。许多原生Android系统出于安全策略会禁止此行为。对于需要自动化解锁的场景,你可能需要研究设备特定的免解锁配置(如通过设备管理API)或使用其他解锁方式(如智能锁)。
ℹ️ 本回答由 AI 生成,内容仅供参考