在MediaPlayer仍在准备时停止或释放它

时间:2013-05-14 13:43:42

标签: android android-mediaplayer

这是一个错误还是在准备时不能释放,停止或杀死MediaPlayer

我在MediaPlayer中运行了Service的实例,如果我停止,释放,将其设置为null,而MediaPlayer处于准备状态。但是,如果我停止,释放,如果它处于准备状态,则将其设置为null。

在停止,释放,设置为null后调用

onPrepared()。一些解决方法吗?

我认为当用户想要在完成准备之前停止MediaPlayer时,这是常见用例。

2 个答案:

答案 0 :(得分:14)

通过查看MediaPlayer documentation,您无法在未初始化的对象上调用stop();这是有道理的,因为你无法阻止尚未运行/准备好的东西。

另一方面,release()似乎在查看the source code of MediaPlayer之后就行了。

但添加一个布尔标志表示不再需要MediaPlayer对象并使用该标志释放你的对象(如果onPrepared()被调用)没有坏处。

伪代码看起来像这样:

public void cancel(){
 mCancel = true;
}

public void onPrepared(MediaPlayer player){
  if(mCancel){
   player.release();
   //nullify your MediaPlayer reference
   mediaPlayer = null
  }
}

答案 1 :(得分:1)

另一种解决方案可能是实现OnBufferingUpdateListener并覆盖其方法,如下所示:

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    if (cancel) {
        mp.release();
        mMediaPlayer = null;

    }
}