HarmonyOS鸿蒙Next中怎么实现辅助用户点击屏幕功能

HarmonyOS鸿蒙Next中怎么实现辅助用户点击屏幕功能 【问题描述】:请问鸿蒙怎么实现辅助用户点击屏幕功能;目前支持吗,  我希望的时候像小米,oppo那样,可以让app辅助用户进行点击操作

【问题现象】:

【版本信息】:开发工具版本:6.0、手机系统版本:6.0、Api语言版本:20

9 回复

尊敬的开发者,您好!该功能正在评估中,感谢您的理解与支持。

更多关于HarmonyOS鸿蒙Next中怎么实现辅助用户点击屏幕功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者你好,问题中提到的“让app辅助用户进行点击操作”,具体指的是什么操作,希望你这边详细描述下操作步骤,从视频中无法感知您的具体场景;

比如以下场景。

1、通过语音指令的方式,让app执行点击操作。

2、捕捉眼球位置,通过眼球停留触发点击操作。

捕捉眼球位置,通过眼球停留触发点击操作。

鸿蒙有那么牛逼吗?我不相信。

找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

将我们App分享表情包到微信QQ聊天场景 这一固定操作流程中的点击事件自动完成,来减少操作步骤,达到“一键发图”的体验效果

相关体验在安卓系统各个输入法进行相同操作时,已经非常普遍

开发者你好,这边需要再明确一下更具体点的场景:

1、标题中说的辅助点击,这边回复中提到的是分享后的操作自动化完成,有点不太明确,希望详细描述下。

2、您这边是输入法应用的开发过程中遇到的场景吗,需要在输入法应用中集成该能力吗?

手机自带的小艺帮帮忙可以,

在HarmonyOS Next中,可通过AccessibilityExtensionAbility实现辅助点击功能。开发者需在module.json5中声明accessibilityCapabilities权限,并配置相关能力。在扩展能力中,使用AccessibilityElement获取界面节点信息,通过performAction方法执行点击操作。系统辅助服务需用户手动开启。

在HarmonyOS Next中,实现辅助用户点击屏幕的功能,核心是使用AccessibilityExtensionAbility(无障碍扩展能力)。该功能目前是支持的,其设计理念与Android的AccessibilityService类似,但采用了鸿蒙的分布式和声明式UI架构。

实现此功能主要分为以下几个步骤:

  1. 工程配置

    • 在工程的module.json5配置文件中,声明AccessibilityExtensionAbility
    • 需要申请ohos.permission.ACCESSIBILITY权限。
    {
      "module": {
        "extensionAbilities": [
          {
            "name": "MyAccessibilityExtensionAbility",
            "srcEntry": "./ets/MyAccessibilityExtensionAbility/MyAccessibilityExtensionAbility.ts",
            "type": "accessibility",
            "description": "$string:accessibility_description",
            "metadata": [
              {
                "name": "ohos.accessibleability",
                "resource": "$profile:accessibility_config"
              }
            ]
          }
        ],
        "requestPermissions": [
          {
            "name": "ohos.permission.ACCESSIBILITY"
          }
        ]
      }
    }
    
  2. 创建无障碍配置文件: 在resources/base/profile/目录下创建accessibility_config.json文件,用于配置无障碍服务的信息,如名称、描述、事件类型等。

    {
      "accessibilityCapabilities": [
        "retrieve",
        "touchGuide",
        "keyEventObserver",
        "zoom",
        "gesture"
      ],
      "description": "This is an accessibility service for auto click.",
      "name": "MyAutoClickService",
      "settingsAbility": "EntryAbility"
    }
    
  3. 实现AccessibilityExtensionAbility: 创建并实现自定义的AccessibilityExtensionAbility子类。这是功能的核心,需要重写关键的回调方法。

    • onConnect(): 服务连接时调用,可在此初始化。
    • onAccessibilityEvent(): 接收无障碍事件(如窗口状态变化、视图点击等)的核心回调。你可以在这里分析界面节点信息。
    • onKeyEvent(): 接收物理按键事件。
    • injectGesture(): 这是实现模拟点击的关键方法。你可以通过此方法注入手势(如点击、滑动)。
    import AccessibilityExtensionAbility from '@ohos.application.AccessibilityExtensionAbility';
    import { BusinessError } from '@ohos.base';
    import accessibility from '@ohos.accessibility';
    
    export default class MyAccessibilityExtensionAbility extends AccessibilityExtensionAbility {
      onConnect(): void {
        // 服务连接初始化
      }
    
      onAccessibilityEvent(accessibilityEvent: accessibility.AccessibilityEvent): void {
        // 分析事件,例如找到需要点击的控件节点
        let nodeInfo: accessibility.AccessibilityElement | null = accessibilityEvent.getSource();
        if (nodeInfo) {
          // 判断节点是否符合点击条件(例如通过文本、ID、类型)
          if (this.isTargetNode(nodeInfo)) {
            // 获取节点在屏幕上的位置
            let rect: accessibility.Rect = nodeInfo.getRect();
            let clickPoint: accessibility.Point = { posX: rect.left + rect.width / 2, posY: rect.top + rect.height / 2 };
    
            // 构造并注入一个点击手势
            let gesturePath: accessibility.GesturePath = new accessibility.GesturePath(clickPoint.posX, clickPoint.posY);
            let gestureId: number = 0; // 手势ID由系统分配
            try {
              this.injectGesture([gesturePath], (error: BusinessError, id: number) => {
                if (error) {
                  // 处理注入失败
                  console.error(`Inject gesture failed, error: ${JSON.stringify(error)}`);
                } else {
                  gestureId = id;
                }
              });
            } catch (error) {
              console.error(`Inject gesture exception, error: ${JSON.stringify(error)}`);
            }
          }
        }
      }
    
      private isTargetNode(node: accessibility.AccessibilityElement): boolean {
        // 实现你的节点判断逻辑,例如检查文本内容、组件ID等
        // return node.getText() === "目标按钮";
        return false; // 示例返回
      }
    
      onDisconnect(): void {
        // 服务断开清理
      }
    
      onKeyEvent(keyEvent: KeyEvent): boolean {
        // 处理按键事件
        return false; // 返回false表示不拦截此按键事件
      }
    }
    
  4. 启用服务: 用户需要在系统的“无障碍”设置中,手动找到并启用你开发的无障碍服务(即上面配置的MyAutoClickService)。

关键点与限制

  • 权限与用户授权:应用必须获得用户明确在系统设置中启用该无障碍服务后,才能运行。这是重要的隐私和安全设计。
  • 节点信息获取:通过onAccessibilityEvent回调获得的AccessibilityElement对象,可以获取界面的层级和控件信息,用于定位需要操作的目标。
  • 手势注入injectGesture方法是实现程序化交互(点击、长按、滑动)的标准方式。你需要计算好目标坐标点。
  • 性能与功耗:在onAccessibilityEvent中执行的操作应尽可能高效,避免阻塞主线程或进行过于频繁的查询,以免影响系统性能和电池续航。
  • API版本:你提到的API 20 (HarmonyOS 6.0) 支持上述核心的AccessibilityExtensionAbility能力。请确保在开发时导入正确的API模块(@ohos.accessibility)。

总结,HarmonyOS Next通过AccessibilityExtensionAbility框架提供了完整的辅助功能开发支持,可以实现包括自动点击在内的复杂辅助交互。开发流程涉及服务声明、配置、事件处理和手势注入。最终用户控制权通过系统无障碍设置来保障。

回到顶部