uni-app 背景音频播放管理API uni.getBackgroundAudioManager 在android手机上,如果src地址中包含 %2B则无法播放,重现率100%

uni-app 背景音频播放管理API uni.getBackgroundAudioManager 在android手机上,如果src地址中包含 %2B则无法播放,重现率100%

开发环境 版本号 项目创建方式
Windows win11 HBuilderX

示例代码:

uni.getBackgroundAudioManager().src = “https://outin-e20694dca8bd11ecaa8a00163e1c955c.oss-cn-shanghai.aliyuncs.com/sv/3e5106c2-180ff00e5c1/3e5106c2-180ff00e5c1.mp3?Expires=1653557389&OSSAccessKeyId=LTAI8bKSZ6dKjf44&Signature=HUAy%2FHuryOh3KzE%2FZuTDMp%2B0LK4%3D


### 操作步骤:

只要src地址中有%2B字符串,就会报这个错误,但是这个地址在浏览器里是可以正常播放的

预期结果:

正常播放


### 实际结果:

报错:{"errMsg":"未知错误","errCode":-99}

bug描述:

背景音频播放管理API uni.getBackgroundAudioManager ,如果src地址中包含 %2B就无法播放,android手机,重现率100%

3 回复

加个\转义一下 试试 %2 %2


问题已解决 url中 Signature=HUAy%2FHuryOh3KzE%2FZuTDMp%2B0LK4%3D,将 HUAy%2FHuryOh3KzE%2FZuTDMp%2B0LK4%3D进行uriEncoder 就可以播放,我估计接口内部会对参数做uriDecoder 导致问题

在使用 uni.getBackgroundAudioManager 进行背景音频播放时,如果 src 地址中包含 %2B(即 + 的 URL 编码),在 Android 手机上可能会出现无法播放的问题。这是因为 %2B 在某些情况下可能被错误地解析或处理,导致 URL 无法正确识别。

解决方案

  1. 手动解码 %2B+: 在设置 src 之前,手动将 %2B 解码为 +。可以使用 JavaScript 的 decodeURIComponent 函数来实现。

    let src = 'https://example.com/audio%2Bfile.mp3';
    src = decodeURIComponent(src); // 解码 %2B 为 +
    
    const backgroundAudioManager = uni.getBackgroundAudioManager();
    backgroundAudioManager.src = src;
    backgroundAudioManager.title = 'Audio Title';
    backgroundAudioManager.startTime = 0;
    backgroundAudioManager.play();
  2. 避免使用 %2B: 如果可能,尽量避免在 URL 中使用 %2B,直接使用 + 或其他字符。

    let src = 'https://example.com/audio+file.mp3';
    
    const backgroundAudioManager = uni.getBackgroundAudioManager();
    backgroundAudioManager.src = src;
    backgroundAudioManager.title = 'Audio Title';
    backgroundAudioManager.startTime = 0;
    backgroundAudioManager.play();
  3. 检查 URL 编码: 确保 URL 编码是正确的,并且没有其他字符被错误地编码或解码。

  4. 使用其他音频管理 API: 如果问题依然存在,可以考虑使用其他音频管理 API,如 uni.createInnerAudioContext,它可能对 URL 的处理方式不同。

    const innerAudioContext = uni.createInnerAudioContext();
    innerAudioContext.src = 'https://example.com/audio%2Bfile.mp3';
    innerAudioContext.play();
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!