为什么Android MediaPlayer在找不到URL返回时卡在prepare()中



所以这是我在应用程序中播放音频文件时使用的简单代码:

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}

这是错误日志:

java.io.IOException: Prepare failed
at android.media.MediaPlayer._prepare(Native Method)

此错误会使应用程序冻结约10秒,并在提供mp3文件的url返回404(未找到(时发生。那么我该如何解决这个问题呢?

我使用了mediaPlayer.prepareAsync(),但没有任何变化。

请尝试以下方式,以下代码在kotlin中,但您可以在java 中使用这种方式

mPlayer = MediaPlayer.create(mContext, myUri(uriAudio))
if (Build.VERSION.SDK_INT >= 21) {
val audioAttributes: AudioAttributes =
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
mPlayer!!.setAudioAttributes(audioAttributes)
} else {
mPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
}

if (mPlayer != null && !mPlayer!!.isPlaying) {
mPlayer!!.start()
}

您可以尝试以下方法:https://developer.android.com/reference/android/media/MediaPlayer#setAudioStreamType(int(

方法setAudioStreamType在API 26级中已被弃用。使用setAudioAttributes(android.media.AudioAttributes(

最新更新