项目背景:
多媒体USB音乐,底层调用MediaPlayer来播放U盘中读取的歌曲,由于最初版本将一首MP3歌曲甜蜜蜜写到了AS的raw目录,直接本地播放,做了一首假数据:
即:
//临时代码,写死歌曲甜蜜蜜,点击后会播放甜蜜蜜
// mMediaPlayer.setDataSource(AudioHelper.getContext(),
// Uri.parse("android.resource://"+AudioHelper.getContext().getPackageName()+"/"+R.raw.tianmimi));
实现了播放,一开始设备没有喇叭。后来发现这组临时代码没有删除,点击播放真正在播放的USB歌曲,UI刷新的没问题,但实际播放的歌曲都是这个甜蜜蜜。
于是根据从USB中读取到的歌曲文件的URL,还是使用MediaPlayer来播放歌曲,即:
mMediaPlayer.setDataSource(audioBean.mUrl);//设置播放文件
这里的audioBean是我写的一个歌曲实体类的对象。
这个时候大问题来了,就是本文总结的问题,发现改完代码后点击界面所有的播放暂停、上一首、下一首、歌曲列表点击均无效,无法播放歌曲了,UI也不刷新。
解决问题的步骤总结:
(1)先排查问题,既然本地AS的歌曲能够播放出声音,问题大概率出现在现在更改的位置,初步确定。
(2)开始在对应的代码块重要位置加LOG,运行,点击排查。最后发现捕获了异常,mMediaPlayer.setDataSource方法有报错,之后的方法不执行。
即:
异常信息的LOG:
异常信息java.io.FileNotFoundException: /mnt/media_rw/7F83-4CE4/张韶涵 - 活在此刻.mp3