我的媒体播放器的使用很典型,只有在尝试设置播放参数时才会出现问题。
- 创建媒体播放器:MediaPlayer mMediaPlayer = new MediaPlayer();
- 将数据源设置为已知可用的本地媒体文件
- mMediaPlayer.prepareAsync();
- 在OnPrepared()回调中调用mMediaPlayer.start()
如果我调用:
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
mMediaPlayer.setPlaybackParams(new PlaybackParams().setSpeed(2.0f));
}
在调用mMediaPlayer.start()之前,播放速度按预期受到影响,并且没有异常出现。如果我在mMediaPlayer.start()调用后放置setSpeed()调用,则应用程序会崩溃并显示非法状态异常。有趣的是,这只发生在手机上(Nexus 5、Priv),但在测试过的平板电脑上(Nexus 7和9)运行良好。我看到一些建议提到暂停音频并等待几百毫秒,但没有帮助。根据文档,在音频正在播放时设置播放速度是完全可以接受的。有人知道这里发生了什么吗?我已经花费太多时间研究这个问题了。谢谢!
setSpeed()
时遇到了问题,似乎通过在创建MediaPlayer时使用getApplicationContext()
得以解决 - 请参见AOSP Issue Tracker中的此线程。如果new MediaPlayer()
仅在某些设备上将活动用作上下文,则这可能是您的解决方法。由于有太多的“if”,我不会将其发布为答案,但我很想听一听它是否适用于您的情况 :) - Bö macht Blau