HarmonyOS鸿蒙Next中如何播放系统通知默认铃声

HarmonyOS鸿蒙Next中如何播放系统通知默认铃声 我现在需要实现铃声选择,当用户选择「手机系统铃声」时,需要给用户播放手机系统通知的默认铃声

cke_2854.png

请问该该能如何实现这个功能呢?搜索了论坛是使用音频播放器来播放系统通知铃声,但我这边目前无法获取到系统通知铃声地址。查看了官方文档ringtone模块,也没有播放系统通知铃声的api.


更多关于HarmonyOS鸿蒙Next中如何播放系统通知默认铃声的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

1、通知消息自定义铃声实现

  • 当用户终端收到通知消息时,通知提示会播放系统默认通知铃声。如需实现自定义铃声功能(category取值为MARKETING不支持该功能), 消息需要携带 sound 字段。此功能需要服务端和客户端协同配置,具体步骤可以参考以下:
  1. 将自定义铃声文件放在客户端工程中/resources/rawfile路径下(例如设置为alert.mp3,对应本地的**/resources/rawfile/alert.mp3**文件),重新编译安装应用程序包。

  2. 服务端调用REST API推送通知消息,消息体中携带sound字段。

    // Request URL
    POST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send
    
    // Request Header
    Content-Type: application/json
    Authorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****
    push-type: 0
    
    // Request Body
    {
      "payload": {
        "notification": {
          "category": "TRAVEL", // 替换为实际消息类型
          "title": "普通通知标题",
          "body": "普通通知内容",
          "clickAction": {
            "actionType": 0
          },
          "notifyId": 12345,
          "sound": "alert.mp3",  // category取值为MARKETING时,不支持该功能
          "soundDuration": 10  // 请求同时携带sound字段时才会生效
        }
      },
      "target": {
        "token": ["MAMzLg**********lPW"]
      },
      "pushOptions": {
       "testMessage": true,
        "ttl": 86400
      }
    }
    
    • sound:(选填)自定义消息通知铃声。此处设置的铃声文件必须放在应用的/resources/rawfile路径下。例如设置为alert.mp3,对应应用本地的**/resources/rawfile/alert.mp3**文件。详情请见sound。category取值为MARKETING时,不支持该功能。
    • soundDuration:(选填)自定义消息通知铃声时长,仅支持数字,单位为秒,取值范围 [1, 60],在请求同时携带sound字段时才会生效。sound字段传入的自定义消息通知铃声会播放至soundDuration字段值后停止,若自定义消息通知铃声对应的时长不足soundDuration字段值则会循环播放,在达到soundDuration字段值后停止。详情请参见soundDuration

2、使用Ringtone Kit来设置通知铃声:

  • Ringtone Kit(铃声服务)是一个用于设置铃声的工具库。通过使用Ringtone Kit,开发者可以在HarmonyOS应用中提供铃声设置的功能,为用户提供简单一致、安全高品质的铃声设置体验。

相关文档:【Ringtone Kit使用指南】【推送通知消息】

相关示例:【铃声设置】

更多关于HarmonyOS鸿蒙Next中如何播放系统通知默认铃声的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中播放系统通知默认铃声,可以使用NotificationHelperplayNotificationSound方法。该方法直接调用系统通知铃声,无需指定具体音频文件。示例代码:

import notificationHelper from '@ohos.notificationHelper';

notificationHelper.playNotificationSound();

此方法会自动播放当前系统设置的通知铃声。

在HarmonyOS Next中,播放系统通知默认铃声可以通过ringtone模块的getSystemRingtoneUri方法获取铃声URI,再使用AVPlayer进行播放。

具体实现步骤如下:

  1. 获取系统通知铃声的URI: 使用ringtone.getSystemRingtoneUri方法,传入ringtone.RingtoneType.NOTIFICATION参数,即可获取系统通知铃声的URI。

    import { ringtone } from '[@kit](/user/kit).AudioKit';
    import { media } from '[@kit](/user/kit).MediaKit';
    import { common } from '[@kit](/user/kit).AbilityKit';
    
    let uri: string = ringtone.getSystemRingtoneUri(ringtone.RingtoneType.NOTIFICATION);
    
  2. 创建AVPlayer并播放: 使用获取到的URI创建AVPlayer实例,调用其播放方法。

    let avPlayer: media.AVPlayer | undefined = undefined;
    
    // 创建AVPlayer
    media.createAVPlayer().then((player: media.AVPlayer) => {
      avPlayer = player;
      // 设置URI
      avPlayer.src = uri;
      // 准备播放
      avPlayer.prepare().then(() => {
        avPlayer.play(); // 开始播放
      });
    }).catch((error: Error) => {
      console.error(`Failed to create AVPlayer, error: ${error}`);
    });
    
  3. 资源释放: 在铃声播放完成后或组件销毁时,记得释放AVPlayer资源。

    if (avPlayer) {
      avPlayer.release();
      avPlayer = undefined;
    }
    

注意事项

  • 确保在module.json5中申请ohos.permission.READ_AUDIO权限,用于读取系统铃声。
  • 此方法获取的是系统默认通知铃声,无法获取用户自定义的铃声。
  • 播放时需考虑音频焦点管理,避免与其他应用音频冲突。

如果遇到权限问题,请检查权限是否已正确配置。

回到顶部