在android 6.0设备(不是模拟器api 23)中我收到了奇怪的问题。播放器开始播放歌曲但是在1或2秒后它再次转到00:00,在此转换过程中,播放器跳过转换所需的时间并从该地点开始播放,例如(00:07)。
但是在20多秒后,歌曲开始正常播放约5到10秒,然后播放器因歌曲完成而停止播放。这个过程的总时间是歌曲持续时间的一半。
我认为准备音乐一定有问题,但我不确定是什么问题。
这是我到目前为止所写的代码
public static MediaPlayer player = null;
// above line is declared at start of class
// below code is written in a async task doInBackground
if (player != null) {
player.release();
player = null;
}
durationOfSong = 0;
String streamUrl = getSongsList.getStreamUrl(position);
player = MediaPlayer.create(context, Uri.parse(streamUrl));
try {
Log.d(LOG_TAG, "end time: " + player.getDuration());
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
mHandler.postDelayed(UpdateSong, 100);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
loadingSongProgress.setMessage("Buffering song...");
}
});
Manipulate manipulate = new Manipulate();
endTimingOfSong = manipulate.MillisecondsToFormat(player.getDuration());
} catch (NullPointerException e) {
Log.e(LOG_TAG, "NP: error: " + e.toString());
DialogWithNoSongError(view);
}
// and in post execute method
loadingSongProgress.dismiss();
player.start();
createMediaDialog(view,position);
// create media dialog is used to show image, song name and running time
运行< 6.0 OS和模拟器(运行6.0)的Android设备以正常方式播放歌曲。 如果需要更多代码我将编辑帖子,如果需要请建议。 在此先感谢!!
答案 0 :(得分:1)
从底部删除代码以下代码
player.start();
并替换以下
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
loadingSongProgress.setMessage("Buffering song...");
mHandler.postDelayed(UpdateSong, 100)
}
});
player.prepareAsync();
尝试运行它可能对您有所帮助
答案 1 :(得分:0)
试试这个。它对我有用。
player.setDataSource(getSongsList.getStreamUrl(position));
player.prepareAsync();
注意:有两种方法可以准备媒体播放器: 1. player.prepare();这个在完成准备操作后返回,因此导致UI线程延迟。