本文主要记录使用Android 的MediaPlayer时遇见的一个很奇怪的bug
播放音乐时会出现调用了start,但是没有声音出来
* 测试机器:华为Honor 8, Android 7.0;
* 需求:在音乐列表界面播放音乐,音乐分为本地音乐和网络音乐
* 工具:IjkMediaPlayer在播放网络音乐时差不多有个10秒的延时,就是用户点击到播放出来差不多要10秒(网没有问题,很快),播放本地音乐没有这个问题,暂时无解,所以使用Android 提供的MediaPlayer.
* 思路:按照我的理解嘛,把网络和本地的音乐播放代码用一个,所以使用异步prepare,(注意,这里埋下了问题),因为是在列表里,音乐有很多,点击音乐A播放,再次点击A是暂停,然后再次点击A是继续播放,很简单的功能,所以加了一个判断,记录了上一次的播放的音乐地址,如果不一样,就需要重新初始化Mediaplayer, 因为要联网获取,懒得开线程,直接使用MediaPlayer的异步操作prepareAsync(),写如下出来的代码
```
@Override
public void play(@NonNull String url) {
play(url, false);
}
@Override
public void play(@NonNull String url, boolean restart) {
synchronized (mPlayerLocker) {
try {
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
}
if (restart || !mLastPlayMusicUrl.equals(url)) {
mMediaPlayer.reset();
mMediaPlayer.setLooping(true);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setOnPreparedListener(mMediaPrepareListener);
mMediaPlayer.setVolume(0.5f, 0.5f);
mMediaPlayer.setDataSource(url);
mLastPla