更新记录
1.0.4(2024-05-06)
- 增加节点绘制功能,点击打印节点信息。
- 修改节点工具接口 NodeTarget 中的 nodeList泛型为 AutoAccessibilityNodeInfo包装类,提供 toJSONString() 方法。
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.8.1,Android:4.4,iOS:不支持 |
× |
× |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
× |
× |
× |
× |
× |
× |
× |
× |
× |
xuehn-android-Accessibility
开发文档
UTS 语法
UTS API插件
UTS 组件插件
Hello UTS
插件接口
无障碍
import {
checkAccessibilityService,
requestAccessibilityService
} from "@/uni_modules/xuehn-android-Accessibility";
// 检查无障碍服务状态
const flag:boolean = checkAccessibilityService();
// 申请无障碍权限
requestAccessibilityService();
前台服务
import {
startForegroundService,
stopForegroundService
} from "@/uni_modules/xuehn-android-Accessibility";
// 开启前台服务
startForegroundService();
// 停止前台服务
stopForegroundService();
电池优化
import {
checkBatteryOptimizeStatus,
requestIgnoreBatteryOptimization
} from "@/uni_modules/xuehn-android-Accessibility";
// 检查电池优化状态
checkBatteryOptimizeStatus();
// 请求忽略电池优化
requestIgnoreBatteryOptimization(requestCode:number);
节点工具
import {
NodeTarget,
// 创建无障碍节点实例,创建时会捕捉当前屏幕全部节点
nodeTargetInstance
} from "@/uni_modules/xuehn-android-Accessibility";
// 节点抓取
const nodeTarget = nodeTargetInstance() as NodeTarget;
// 节点绘制
nodeTarget.drawNodeList();
// 打印节点
const nodeList:Array<AutoAccessibilityNodeInfo> = nodeTarget.nodeList;
nodeList.forEach(node => {
console.log(node.toJSONString());
// const childList:Array<AutoAccessibilityNodeInfo>|null = node.getChildList();
})
if(nodeTarget != null){
nodeTarget
.id("com.text:id/tabIV")
.idMatch("id正则")
.text("点击测试")
.textMatch("text正则")
.description("description")
.descriptionMatch("description正则")
.className("className")
.classNameMatch("className正则")
.packageName("packageName")
.packageNameMatch("packageName正则")
.drawingOrder(number)
.visible(boolean)
.bounds(AutoBounds)
.checkable(boolean)
.checked(boolean)
.clickable(boolean)
.longClickable(boolean)
.scrollable(boolean)
.focusable(boolean)
.enabled(boolean)
.focused(boolean)
.selected(boolean)
.childCount(number)
.click();
.longClick()
.swipe(x: number, y: number, duration: number): boolean
.drag(startX: number, startY: number, endX: number, endY: number, duration: number): boolean
.recycleAccessibilityNodeInfo(): void;
}
屏幕捕捉
import {
AutoImage,
ScreenshotHelper,
// 创建屏幕捕捉实例(需先开启前台服务)
screenshotHelperInstance
} from "@/uni_modules/xuehn-android-Accessibility";
const screenshotHelper = screenshotHelperInstance() as ScreenshotHelper;
// 请求截图权限
screenshotHelper?.requestScreenCapture();
// 屏幕捕捉
const autoImage:AutoImage = screenshotHelper?.captureImage();
完整测试示例
<template>
<view>
<button text="点击测试" @onclick="test()"></button>
<button text="开启前台服务" @onclick="startForegroundService()"></button>
<button text="停止前台服务" @onclick="stopForegroundService()"></button>
<button text="申请截图权限(需要前台服务)" @onclick="testRequestScreenCapture()"></button>
<button text="获取截图" @onclick="testCaptureImage()"></button>
<button text="检查无障碍服务状态" @onclick="testCheckAccessibilityService()"></button>
<button text="申请无障碍服务权限" @onclick="testRequestAccessibilityService()"></button>
<button text="检查悬浮窗服务状态" @onclick="testCheckFloatWindowStatus()"></button>
<button text="请求悬浮窗权限" @onclick="requestFloatWindow()"></button>
<button text="绘制节点(双击退出绘制)" @onclick="testNodeTarget()"></button>
</view>
</template>
<script lang="uts" setup>
// import { ComponentPublicInstance } from 'vue'
import {
checkAccessibilityService,
requestAccessibilityService,
startForegroundService,
stopForegroundService,
checkBatteryOptimizeStatus,
requestIgnoreBatteryOptimization,
checkFloatWindowStatus,
requestFloatWindow,
NodeTarget,
AutoAccessibilityNodeInfo,
nodeTargetInstance,
ScreenshotHelper,
screenshotHelperInstance,
AutoImage,
} from "@/uni_modules/xuehn-android-Accessibility";
const test = () => {
console.log("点击了测试")
}
/**
* 测试-请求截图权限
*/
let screenshotHelper:ScreenshotHelper|null = null;
const testRequestScreenCapture = () => {
screenshotHelper = screenshotHelperInstance() as ScreenshotHelper;
screenshotHelper?.requestScreenCapture();
}
/**
* 测试-抓取屏幕
*/
const testCaptureImage = () => {
if(screenshotHelper != null){
const autoImage:AutoImage|null = screenshotHelper?.captureImage();
if(autoImage != null){
console.log(JSON.stringify(autoImage))
console.log(autoImage.getBase64())
}
}else {
console.log("未申请截图权限")
}
}
/**
* 测试-检查无障碍状态
*/
const testCheckAccessibilityService = () => {
console.log(checkAccessibilityService())
}
/**
* 测试-请求无障碍权限
*/
const testRequestAccessibilityService = () => {
requestAccessibilityService()
}
/**
* 测试-检查悬浮窗权限状态
*/
const testCheckFloatWindowStatus = () => {
console.log(checkFloatWindowStatus())
}
/**
* 测试-无障碍节点
*/
const testNodeTarget = () => {
const nodeTarget = nodeTargetInstance() as NodeTarget;
// 节点绘制
nodeTarget.drawNodeList();
// 打印节点
const nodeList:Array<AutoAccessibilityNodeInfo> = nodeTarget.nodeList;
nodeList.forEach(node => {
console.log(node.toJSONString());
// const childList:Array<AutoAccessibilityNodeInfo>|null = node.getChildList();
})
}
</script>