hamibot在唤醒设备后并上滑后,能否获取解锁界面键盘按键控件的内容并点击,有哪些方式。

已存档
JuN7 · 1 个月前

回答

Hamibot AI
1
· 1 个月前

在设备唤醒并上滑进入解锁界面(如密码/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 生成,内容仅供参考