You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用Awesome Notification如何支持用户从存储选择自定义通知音效?

实现方案说明

这个需求完全可以实现,awesome_notifications插件原生支持读取设备本地存储的音频文件作为通知音效,你只需要调整部分代码逻辑、适配平台差异即可,具体操作如下:

前置注意事项

  • 安卓8.0及以上版本中,通知通道的配置一旦首次创建就无法修改,如果你原来初始化通道时指定了固定soundSource,后续要更换自定义音效时,需要先调用AwesomeNotifications().removeChannel('alarm_notification')删除原有通道,再重新创建新的通知通道。
  • 提前申请对应平台的权限:安卓需要申请存储读取权限,iOS需要申请通知声音权限、媒体库读取权限。
  • 要保证自定义音效的格式符合平台要求:安卓支持MP3、WAV、OGG等常见音频格式,iOS支持WAV、CAF、MP3、AIFF格式,建议用户选择时做格式校验。

具体实现步骤

  1. 用文件选择类插件让用户选择设备本地的音频文件,获取到音频文件的绝对路径。如果是iOS系统,需要将选中的音频文件拷贝到App沙箱的Library目录下,再获取沙箱内的文件路径,避免权限问题导致无法读取。
  2. 给customSound参数传值时,需要在文件路径前拼接file://前缀,调整后的创建通知代码示例如下:
// 假设selectedAudioPath是用户选中的音频文件绝对路径
String customSoundPath = "file://$selectedAudioPath";

AwesomeNotifications().createNotification(
  content: NotificationContent(
    id: alarmId,
    channelKey: 'alarm_notification',
    title: alarmTitle,
    body: alarmBody,
    displayOnBackground: true,
    displayOnForeground: true,
    customSound: customSoundPath,
  ),
  schedule: NotificationCalendar(
    hour: alarmTime.hour,
    minute: alarmTime.minute,
    second: 0,
    millisecond: 0,
    timeZone: "Asia/Jakarta",
    repeats: true,
  )
);
  1. customSound指定的音效优先级高于通知通道设置的默认soundSource,不需要每次换音效都重建通道,直接修改createNotification里的customSound值即可。如果需要让自定义音效作为通道的默认音效,初始化通道时将soundSource参数设置为拼接前缀后的路径即可。

内容的提问来源于stack exchange,提问作者adhiskara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:05