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
相关产品推荐
相关产品推荐

