如何唤醒手机屏幕上滑动解锁打开微信

已存档
熊神大人小迷弟 · 1 个月前
第 1 条补充
·
1 个月前

如何根据层级来找到想要点击的图片

第 2 条补充
·
1 个月前

如何快速点击文本为1的同层级右边的可点击按钮

回答

Hamibot AI
1
· 1 个月前

要实现屏幕唤醒并滑动解锁打开微信,需分两步处理:

  1. 屏幕唤醒部分
    Hamibot目前没有原生API直接唤醒屏幕。可以尝试以下替代方案:

    • 使用其他应用或系统设置实现唤醒(如定时任务、物理按键触发)
    • 保持屏幕常亮:在脚本开头添加 device.keepOn()(需开启无障碍服务)
  2. 滑动解锁操作(需root权限)
    以下是完整的示例代码:

// 文档地址 https://docs.hamibot.com/
// 假设从底部上滑解锁(需根据实际屏幕坐标调整)
Swipe(540, 1800, 540, 300); // 从(540,1800)滑动到(540,300)
sleep(1000); // 等待解锁完成

// 打开微信(假设桌面存在微信图标)
click("微信"); // 或使用坐标点击:Tap(x, y)

注意事项:

  • Swipe() 需要 root 权限且坐标需根据设备实际分辨率调整
  • 可通过「开发者选项」->「指针位置」获取准确坐标
  • 解锁后若需要继续操作微信,建议结合 click("微信") 或坐标点击
  • 部分设备需在设置中允许Hamibot的悬浮窗权限

如果需要更精确的交互(如绘制解锁图案),应使用多点触摸API:

var ra = new RootAutomator();
ra.swipe(100, 100, 300, 300, 300); // 从(100,100)滑动到(300,300)
ra.exit();

补充回答 1

在Hamibot中,可通过结合图像识别与UI层级定位来精准点击目标图片。以下是具体方法:

  1. 图像查找定位
    使用images.findImageimages.matchTemplate函数时,通过region参数限定搜索区域:
// 示例:在屏幕右侧区域查找图片
var result = images.findImage(img, template, {
    region: [screenWidth*0.6, 0, screenWidth*0.4, screenHeight]
});
  1. UI层级筛选
    通过UiSelectordrawingOrder方法指定绘制顺序(适用于Android 7.0+):
// 示例:点击第2个绘制的可点击控件
var w = className("Button").drawingOrder(1).findOne();
w.click();
  1. 坐标范围验证
    使用boundsContains确保点击位置在指定控件区域内:
// 示例:验证坐标是否在指定控件范围内
var bounds = [100, 200, 300, 400];
clickable().boundsContains(...bounds).findOne().click();
  1. 多结果排序处理
    当存在多个匹配项时,可通过max参数控制结果数量,并按位置优先级筛选:
// 示例:获取最多3个匹配结果并选择最上方的
var results = images.matchTemplate(img, template, { max: 3 });
results.sort((a, b) => a.y - b.y).shift().click();

注意:层级定位需结合具体应用场景,建议先用布局分析工具获取控件bounds属性,再通过region参数或boundsContains进行精确匹配。对于复杂层级结构,可分步骤先定位父级控件,再在子区域进行图像查找。


补充回答 2

在Hamibot中,可通过以下步骤快速点击文本为"1"的同层级右侧可点击按钮:

// 获取文本为"1"的控件边界
var textBounds = text("1").bounds();
if (textBounds.notNull()) {
    // 计算右侧区域(向右扩展50像素)
    var rightRegion = [textBounds.right + 10, textBounds.top, 
                      textBounds.right + 100, textBounds.bottom];
    
    // 在右侧区域查找可点击控件
    var rightButton = className("Button").boundsContains(...rightRegion).findOne();
    if (rightButton) {
        rightButton.click();
    } else {
        // 尝试使用坐标点击(需确保坐标有效)
        click(rightRegion[0], rightRegion[1], rightRegion[2], rightRegion[3]);
    }
}

关键点说明:

  1. text("1").bounds() 会获取第一个匹配文本"1"的控件边界
  2. 通过 boundsContains 将搜索范围限定在文本右侧区域
  3. 使用 className("Button") 过滤按钮控件,避免误点其他元素
  4. 若无法直接定位控件,可使用 click(left, top, right, bottom) 直接点击计算的坐标区域

注意事项:

  • 需确保右侧区域存在可点击控件,否则会返回false
  • 对于复杂布局,建议先用布局分析工具获取准确bounds值
  • Android 7.0+ 可使用 drawingOrder 辅助定位同层级控件
ℹ️ 本回答由 AI 生成,内容仅供参考