我在重复当前歌曲的onCompletion听众中使用以下代码MediaPlayer。
if (isRepeat) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.reset();
}
try {
mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath());
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息,
at android.media.MediaPlayer._setDataSource(Native Method)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1115)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1100)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1079)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1028)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
如果您的MediaPlayer没有播放任何内容或曲目已结束,则不会重置它。让您mMediaPlayer.reset();摆脱困境
try {
mMediaPlayer.reset();
mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath());
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
您应该reset()在使用之前致电setDataSource()。
如果媒体正在播放,则您的条件绝对是可写的,但是当轨道结束时,它会变为假。
MediaPlayer.setDataSource()仅当MediaPlayer状态为空闲时才有用,您调用了此方法,onCompletion因此 android 系统给了您一个IllStateException. mMediaPlayer.isPlaying()方法中似乎总是返回 false onCompletion。
其实你不需要setDataSource再次调用,只需调用MediaPlayer.start()从头开始播放数据即可。
请参阅此状态图(取自https://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram):

| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |