我已经创建了一个歌曲列表,点击了我能够使用MedaiPlayer播放歌曲的歌曲 . 当一首歌正在播放时,如果用户点击另一首歌,那么我将停止媒体播放器并再次启动播放器 . 但我在reset()中遇到非法的例外情况 . 这是我得到异常的代码 . 如何正确阻止玩家?也为什么我得到这个例外 . 怎么避免呢?
public void stopPlayer() {
try {
if (player != null) {
// Log.e("Trying to Stop "," Player ");
player.stop();
player.release();
player.reset();// causes IllegalstateException
player = null;
}
} catch (Exception e) {
player = null;
playerStatus = false;
e.printStackTrace();
}
}
5 回答
试试这个 :
并且还看看媒体播放器state diagram .
如果你想再次播放,那么使用
player.reset()
,player.release()
意味着它会释放播放器对象,因此你必须重新初始化播放器 . 首先你使用reset()
然后release()
. 当您的播放器对象不再起作用时使用release()
. 当你的活动破坏release()
方法用于良好实践 .每当你想要阻止它时:
每当您的玩家不再需要时:
Though the accepted answer works, This is a better way to achieve the task
您是否计划再次重新使用播放器,或者您是否已完成播放器?如果您已完成播放器,请调用release()而不是reset() . 如果您打算重新使用播放器,请调用reset()而不是release() .
reset()将播放器重置为未初始化状态 . release()释放与播放器关联的所有资源 .
Media Player State Diagram显示,并说明:
这意味着,在调用stop()之后,如果我们想再次播放它,我们应该在同一音频文件上调用prepare() . 否则再次调用start()将不会执行任何操作 .
由于prepare()可能抛出异常,我们应该将它包装在try-catch块中,如下所示: