You need to enable JavaScript to run this app. Android开发:如何获取MediaPlayer从URL加载资源的进度百分比?
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何获取MediaPlayer从URL加载资源的进度百分比?

实现MediaPlayer网络音频加载百分比获取方案

核心依赖Android系统MediaPlayer内置的OnBufferingUpdateListener回调实现,你原有代码使用的是同步prepare()方法,需先调整为异步准备逻辑,避免阻塞主线程同时才能接收缓冲进度回调。

具体修改步骤

  • 给MediaPlayer注册OnBufferingUpdateListener监听器,回调方法携带的percent参数就是已加载资源占总资源的百分比,取值范围为0~100
  • 将原有同步prepare()方法替换为异步prepareAsync(),避免主线程阻塞引发ANR
  • 新增OnPreparedListener监听,在音频资源准备完成后再调用start()方法播放

修改后完整代码示例

mediaPlayer = new MediaPlayer();
// 注册缓冲更新监听,获取加载百分比
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        // percent即为当前加载百分比,可直接用于更新UI等业务逻辑
        Log.i("MediaPlayer加载进度", "已加载:" + percent + "%");
        // 示例:更新进度条
        // loadProgressBar.setProgress(percent);
    }
});
// 注册准备完成监听,资源准备就绪后自动播放
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});
try {
    mediaPlayer.setDataSource(url);
    // 替换原有同步prepare为异步prepareAsync
    mediaPlayer.prepareAsync();
} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 上述方案仅适用于点播音频场景,若加载的是无固定总长度的直播流,percent返回值会存在不准确的情况
  • 如果你需要获取更精细的已加载字节数、总字节数等数据,需要自行实现HTTP下载代理层,先将资源下载到本地缓存,再给MediaPlayer传入本地缓存路径,自行计算加载进度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 20:27:02