参考官方文档: Bot.js Pro API 文档

本文基于 Bot.js Pro 9,详细讲解 $assistant 模块的使用方法,包括控件树访问、窗口管理、窗口过滤以及常用方法调用,帮助开发者快速上手自动化操作和调试。


🧩 模块简介

$assistant 模块用于访问 AssistService 控件树,管理系统窗口,类似 Android 无障碍节点树或控件树遍历。

  • 模块名称$assistant — AssistService 控件树访问与窗口管理
  • 官方参考文档AssistService API

🧠 可用属性与方法一览

API 名称 类型 返回值 说明
$assistant.service Getter AssistService 返回当前 AssistService 实例
$assistant.windows Getter Array<Window> 获取所有系统窗口对象数组
$assistant.root Getter UiNode 获取第一个窗口的根节点
$assistant.rootInActiveWindow Getter UiNode 获取当前活跃窗口的根节点
$assistant.windowRoots Getter Array<UiNode> 获取所有过滤后的窗口根节点
$assistant.setWindowFilter(filterFn) Function void 设置窗口过滤器,用于控制哪些窗口被分析
$assistant.currentPackage() Function String 获取当前前台应用包名
$assistant.currentActivity() Function String 获取当前前台 Activity 类名

🔹 方法详细说明

$assistant.service

返回当前连接的辅助服务(AssistService)。

var service = $assistant.service;
if (service != null) {
    console.log("语音交互服务 已启动:", service);
} else {
    console.log("语音交互服务 未连接");
}

参考:auto.service


$assistant.windows

返回系统当前存在的所有窗口(包括后台窗口)。

var windows = $assistant.windows;
console.log("窗口数量:", windows.length);
windows.forEach((w, i) => console.log("窗口[" + i + "] 标题:", w.getTitle()));

$assistant.root

返回第一个窗口的根节点。

var root = $assistant.root;
if (root) {
    console.log("第一个窗口根节点:", root);
    console.log("子节点数:", root.children().length);
} else {
    console.log("未找到根节点");
}

$assistant.rootInActiveWindow

返回当前活跃窗口的根节点。

var activeRoot = $assistant.rootInActiveWindow;
if (activeRoot) {
    console.log("当前活跃窗口根节点:", activeRoot);
} else {
    console.log("无活跃窗口");
}

$assistant.windowRoots

返回所有被过滤器允许的窗口根节点。

var roots = $assistant.windowRoots;
console.log("过滤后根节点数量:", roots.length);
roots.forEach((r, i) => {
    console.log("根节点[" + i + "] 子节点数:", r.children().length);
});

$assistant.setWindowFilter(filterFn)

设置窗口过滤器函数,用于筛选窗口。

$assistant.setWindowFilter(function (window) {
    log("检测窗口: " + window.getTitle());
    return true; // 全部允许
});

// 只允许特定 App 或标题
$assistant.setWindowFilter(function (window) {
    return window.getTitle().includes("com.tencent.mm"); // 仅保留微信窗口
});

$assistant.currentPackage()

返回最近一次监测到的正在运行的应用包名。

var pkg = $assistant.currentPackage();
log("当前应用包名: " + pkg);

注意:语音助手服务未启动时会抛出异常,需要开启服务。


$assistant.currentActivity()

返回最近一次监测到的正在运行的 Activity 类名。

var act = $assistant.currentActivity();
log("当前 Activity: " + act);

注意:语音助手服务未启动时会抛出异常,需要开启无障碍功能。


💡 示例:完整流程调用

// 初始化过滤器
$assistant.setWindowFilter(function (window) {
    log("检测窗口: " + window.getTitle());
    return true;
});

// 检查 AssistService 是否运行
var service = $assistant.service;
console.log("AssistService:", service);

// 获取所有窗口
var windows = $assistant.windows;
console.log("所有窗口数量:", windows.length);

// 输出窗口信息
windows.forEach((w, index) => console.log("窗口[" + index + "]:", w.getTitle()));

// 根节点获取
var root = $assistant.root;
if (root != null) console.log("第一个窗口根节点子节点数:", root.children().length);

// 当前活跃窗口根节点
var activeRoot = $assistant.rootInActiveWindow;
if (activeRoot != null) console.log("活跃窗口根节点:", activeRoot);

// 所有被过滤的窗口根节点
var filteredRoots = $assistant.windowRoots;
console.log("被过滤的窗口根节点数量:", filteredRoots.length);

// 截图示例
console.log("截图返回 Image 对象: ", $assistant.captureScreen());
console.log("截图保存至路径: ", $assistant.captureScreen("/sdcard/01.png"));

⚙️ 控件节点的查找和点击实例

selector(1) 选择器参数1 代表使用的就$assistant服务的节点选择器,下方代码就是开发工具自动生成的,不需要手写。


var uiObject = selector(1).text("云控").desc("云控").className("android.widget.TextView").visibleToUser(true).scrollable(false).clickable(true).findOne(1000);
if (uiObject) {

  $hid.click(uiObject.bounds().centerX(), uiObject.bounds().centerY());
  sleep(1000);

} else {
  toastLog("未找到符合条件的控件");
}

在这里插入图片描述
手机端 Bot.js Pro App也支持布局分析和代码自动生成

在这里插入图片描述


更多 API 细节请参考 Bot.js Pro 官方文档

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐