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

如何修改cordova-plugin-dialogs插件的beep函数通知提示音

首先明确问题原因:cordova-plugin-dialogs 10.x版本的iOS端实现已经移除了自定义提示音的支持,默认固定调用系统默认通知音,因此修改系统设置、放置音频到www目录都不会生效。以下是3种可行的解决方案:

方案1:修改插件原生实现(最优适配原插件逻辑)

直接调整插件iOS端的原生代码,支持加载自定义音频:

  • 找到插件iOS原生文件:项目路径下的platforms/ios/[你的应用名]/Plugins/cordova-plugin-dialogs/CDVNotification.m
  • 将你的自定义wav音频文件添加到iOS项目的Resources资源目录(注意不要放在www目录下,必须加入原生编译的资源列表)
  • 找到文件中beep方法的实现,将原有调用系统默认音的代码替换为如下逻辑:
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"你的音频文件名(不含后缀)" ofType:@"wav"];
SystemSoundID soundID;
NSURL *soundUrl = [NSURL fileURLWithPath:soundPath];
AudioServicesCreateSystemSoundID((CFURLRef)soundUrl, &soundID);
AudioServicesPlaySystemSound(soundID);
// 播放完成后释放资源
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, (AudioServicesSystemSoundCompletionProc)AudioServicesDisposeSystemSoundID, NULL);
  • 如果怕每次执行cordova prepare覆盖修改,可以编写Cordova hook脚本,每次同步项目时自动替换修改后的CDVNotification.m文件。

方案2:自行实现beep逻辑(无需修改原生插件)

弃用插件自带的beep方法,借助cordova-plugin-media插件实现自定义提示音,跨平台通用:

  • 安装依赖插件:cordova plugin add cordova-plugin-media
  • 将自定义wav音频放入项目www/audio/目录下
  • 封装自定义beep方法替代原生接口:
// 自定义beep方法,参数为播放次数,默认1次
function customBeep(playTimes = 1) {
  const media = new Media('audio/你的自定义音频文件名.wav');
  let currentCount = 0;
  const playCycle = () => {
    if (currentCount >= playTimes) {
      media.release();
      return;
    }
    media.play();
    currentCount++;
    // 两次提示音间隔300ms,和原插件逻辑对齐
    setTimeout(playCycle, 300);
  }
  playCycle();
}

注意:如果需要iOS静音模式下也能播放提示音,可以配合音频会话插件修改音频播放类别即可。

方案3:回退插件版本(不推荐)

如果不需要新版本插件的其他特性,可以回退到支持自定义beep的1.x版本cordova-plugin-dialogs,但要注意验证和当前Cordova iOS平台版本的兼容性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:03