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

关于Cordova Media插件暂停功能失效的技术求助

解决Cordova Media插件暂停/停止失效的问题

我看到你在用Cordova Media插件做播放功能时遇到了暂停/停止没反应的问题,这是个很常见的小坑,咱们来快速定位并解决它!

问题根源

你的代码里有个关键问题:每次点击按钮时都会新建一个Media实例。比如第一次点击播放时,你创建了一个Media('song.mp3')并调用play();但当你再次点击要停止时,又新建了另一个完全独立的Media实例——调用这个新实例的stop(),根本不会影响到之前正在播放的那个对象,因为它们是完全分开的!

另外我还注意到clicked变量似乎没有初始化,这也可能导致第一次点击的逻辑不符合预期。

修复方案

我们需要把Media实例的引用放在外部作用域,确保所有播放/停止操作都针对同一个实例,同时完善状态管理和资源释放逻辑:

// 把媒体实例和状态变量放在外部作用域,确保所有点击都共享它们
let currentPlayingSong = null;
let isPlaying = false; // 用更语义化的变量名替代clicked

function onDeviceReady() { 
    console.log('Device is ready!'); 
    $('#button').click(function () { 
        Player.init(); 
    }); 

    $('#playlistid .card a').click(function () { 
        const targetData = $(this).data('target');
        const playBtnId = `#${targetData}`;
        const pauseBtnClass = `.${targetData}`;

        if (!isPlaying) { 
            // 播放逻辑:先清理旧资源,再创建新实例播放
            if (currentPlayingSong) {
                currentPlayingSong.stop();
                currentPlayingSong.release(); // 释放旧资源,避免内存泄漏
            }

            // 创建新的媒体实例并播放
            currentPlayingSong = new Media('song.mp3');
            currentPlayingSong.play(); 

            // 更新按钮状态
            $(playBtnId).hide();
            $(pauseBtnClass).show();
            isPlaying = true;
        } else { 
            // 停止逻辑:操作当前正在播放的实例
            if (currentPlayingSong) {
                currentPlayingSong.stop();
                currentPlayingSong.release(); // 必须释放资源,这是Cordova的最佳实践
                currentPlayingSong = null;
            }

            // 更新按钮状态
            $(pauseBtnClass).hide();
            $(playBtnId).show();
            isPlaying = false;
        } 
    });
}

额外注意事项

  • 资源释放:每次停止播放后一定要调用release()方法,否则会占用设备的音频资源,甚至导致后续播放异常。
  • 动态路径:如果你的播放列表是多首歌曲,记得把song.mp3换成当前点击歌曲的实际路径(比如从data-*属性里获取)。
  • 错误处理:可以给Media实例添加错误监听,方便排查问题:
    currentPlayingSong.onError = function(error) {
        console.error('Media error:', error);
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:08:11