前言

振动反馈是增强用户交互体验的重要手段,如按键反馈、消息提醒、游戏效果等。HarmonyOS提供了精细的振动控制API,@pura/harmony-utilsDeviceUtil 将其封装为简洁易用的方法,支持多种振动模式。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

在这里插入图片描述

一、DeviceUtil振动核心API

DeviceUtil 提供了以下振动控制方法:

方法 说明 参数 使用场景
vibrate(duration) 指定时长振动 duration: number(ms) 按键反馈、消息提醒
vibrateStop() 停止振动 中止振动效果

1.1 核心特性

  • 简洁易用:封装复杂API为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 灵活控制:支持自定义振动时长和即时停止

1.2 振动时长建议

时长 效果 适用场景
10-30ms 轻触反馈 按钮点击
30-100ms 短振动 开关切换、选择
100-300ms 中等振动 消息提醒
300-500ms 长振动 重要通知

二、完整使用步骤

2.1 安装依赖

ohpm install @pura/harmony-utils

2.2 基础振动

import { DeviceUtil } from '@pura/harmony-utils';

Button('短振动(100ms)')
  .width('100%')
  .onClick(() => {
    try {
      DeviceUtil.vibrate(100);
      this.result = '短振动已触发 📳';
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

Button('长振动(500ms)')
  .width('100%')
  .onClick(() => {
    try {
      DeviceUtil.vibrate(500);
      this.result = '长振动已触发 📳📳';
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 停止振动

Button('停止振动')
  .width('100%')
  .onClick(() => {
    try {
      DeviceUtil.vibrateStop();
      this.result = '振动已停止';
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

在这里插入图片描述

三、完整页面示例

import { DeviceUtil } from '@pura/harmony-utils';

@Entry
@Component
struct VibrateDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('轻触反馈(50ms)').width('100%').onClick(() => {
        DeviceUtil.vibrate(50);
        this.result = '轻触反馈 📳';
      });
      Button('按键反馈(100ms)').width('100%').onClick(() => {
        DeviceUtil.vibrate(100);
        this.result = '按键反馈 📳📳';
      });
      Button('停止振动').width('100%').onClick(() => {
        DeviceUtil.vibrateStop();
        this.result = '振动已停止';
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 自定义振动模式

import { DeviceUtil } from '@pura/harmony-utils';

async function customVibratePattern() {
  await DeviceUtil.vibrate(100);
  await new Promise(resolve => setTimeout(resolve, 100));
  await DeviceUtil.vibrate(100);
  await new Promise(resolve => setTimeout(resolve, 100));
  await DeviceUtil.vibrate(300);
}

4.2 结合按钮反馈

Button('确认操作')
  .width('100%')
  .onClick(() => {
    DeviceUtil.vibrate(30);
    this.doConfirm();
  })

五、注意事项

  1. 权限配置:需要在module.json5中配置振动权限 ohos.permission.VIBRATE
  2. 时长限制:振动时长不宜过长,建议50-500ms
  3. 用户体验:适度使用振动,避免过度干扰用户
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 设备支持:部分设备可能不支持振动功能

六、常见问题

Q1: 振动没有效果怎么办?

检查是否配置了 ohos.permission.VIBRATE 权限,以及设备是否支持振动功能。

Q2: 可以同时触发多个振动吗?

不建议同时触发多个振动,建议使用自定义模式实现连续振动效果。

Q3: 振动会影响应用性能吗?

短时振动对性能影响极小,但频繁触发长振动可能影响用户体验。

Q4: 如何在静音模式下振动?

振动不受静音模式影响,但建议尊重用户设置,在静音模式下减少振动。

在这里插入图片描述
在这里插入图片描述

总结

DeviceUtil 的振动控制方法为应用提供了丰富的触觉反馈能力。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用振动反馈,可以显著提升用户交互体验。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐