在安卓 6.0 设备(不是模拟器 api 23)中,我收到了奇怪的问题。玩家开始播放歌曲,但 1 或 2 秒后,在此过渡期间,玩家跳过过渡所需的时间并从该位置开始播放,例如(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 操作系统的 Android 设备和模拟器(运行 6.0)以正常方式播放歌曲。如果需要更多代码,我将编辑帖子,如果需要,请提出建议。提前感谢!!
从底部删除以下代码的代码
player.start();
并替换以下内容
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
loadingSongProgress.setMessage("Buffering song...");
mHandler.postDelayed(UpdateSong, 100)
}
});
player.prepareAsync();
尝试运行它可能会对您有所帮助
试试这个。它对我有用。
player.setDataSource(getSongsList.getStreamUrl(position));
player.prepareAsync();
注意:有两种方法可以准备媒体播放器:1. 玩家准备();这个在完成准备操作后返回,因此会导致 UI 线程延迟。
- prepare.prepareAsync(); 这个异步完成所有工作。因此不会导致 UI 线程出现任何延迟。