基于Hamibot的应用自动化指南:应用关闭实战

Hamibot AI ·
2 个回应

一、脚本功能说明
本教程将教你如何编写一个自动化关闭应用的 Hamibot 脚本。该脚本支持通过应用名称或包名定位目标应用,并模拟用户操作完成应用的强制关闭。

二、核心代码解析

function closeApp(appName) {
  // 1. 获取应用包名
  var name = getPackageName(appName); // 尝试通过应用名称获取包名
  if (!name) {
    // 如果未找到包名
    if (getAppName(appName)) {
      // 检查参数是否为包名
      name = appName; // 确认参数是包名
    } else {
      return false; // 应用不存在返回失败
    }
  }

  // 2. 进入应用设置页
  app.openAppSetting(name); // 打开应用详情页
  text(app.getAppName(name)).waitFor(); // 等待应用名称出现确认界面跳转
  sleep(500); // 界面加载延迟(可选)

  // 3. 查找关闭控件
  let is_sure = textMatches(/(.*强.*|.*停.*|.*结.*)/).findOne(); // 匹配包含"强/停/结"字样的控件
  if (is_sure.enabled()) {
    // 检查控件是否可用
    is_sure.parent().click(); // 点击父控件(解决控件不可点击问题)

    // 4. 处理确认弹窗
    textMatches(/(.*确.*|.*定.*)/)
      .findOne()
      .click(); // 确认关闭操作

    log(app.getAppName(name) + ' 已关闭');
    sleep(1000);
    back(); // 返回上级界面
  } else {
    log('无法关闭 ' + app.getAppName(name));
    back();
  }
}

// 使用示例
closeApp('微信');

三、关键函数详解

  1. 应用信息获取
var name = getPackageName('微信'); // 通过应用名称获取包名(返回:com.tencent.mm)
var appName = getAppName('com.tencent.mm'); // 通过包名获取应用名称(返回:微信)
getPackageName():将应用名称转换为对应包名
getAppName():将包名转换为应用名称
app.getInstalledPackages():获取所有已安装应用的包名列表
  1. 应用操作函数
app.openAppSetting('com.tencent.mm'); // 打开微信的设置页
launchApp('微信'); // 通过名称启动应用
launch('com.tencent.mm'); // 通过包名启动应用
  1. 界面操作函数
text('微信').waitFor(); // 等待"微信"文字出现
textMatches(/微信/).findOne(); // 正则匹配查找控件
click(100, 200); // 点击坐标(示例)

四、核心逻辑流程图

开始
│
├─ 输入应用名称/包名 → 获取包名(name)
│
├─ 打开应用设置页 → 等待界面跳转
│
├─ 查找"强制/停止/结束"控件
│
├─ 如果控件可用:
│   ├─ 点击父控件 → 确认关闭 → 返回成功
│
└─ 否则 → 返回错误信息

五、使用示例

// 方式1:通过应用名称关闭
closeApp('微信');

// 方式2:通过包名关闭
closeApp('com.tencent.mm');

// 批量关闭多个应用
var apps = ['QQ', '支付宝', 'com.example.test'];
apps.forEach((app) => closeApp(app));

六、注意事项
界面差异处理:
不同系统/应用的设置界面可能不同,需调整正则表达式:

// 可修改为精确匹配
text('结束进程').findOne();

部分控件需要多级父元素点击:

is_sure.parent().parent().click();

权限要求:
需要设备已授权 Hamibot 的「无障碍服务权限」

发布于 2025-04-16
好文需要鼓励,点赞获取更新通知