安卓 - MediaPlayer 错误: 在状态64下调用attachnewplayer

8

我正在按照以下帖子创建简单音乐播放器,但从列表中选择任何歌曲或从MediaController上按上一个/下一个时会出现以下错误。我正在使用Oreo(Andoid 8.1.0 API 27)。

public void playSong()
{
Song playSong = songs.get(songPosn);
songTitle=playSong.getTitle();
long currSong = playSong.getID();
Uri trackUri = ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,currSong);
try
{        
    player.setDataSource(getApplicationContext(), trackUri);
    player.prepareAsync();
}
catch(Exception e){
    Log.e("MUSIC SERVICE", "Error setting data source", e);
}

错误 MediaPlayer 错误: 在状态 64 中调用 attachnewplayer

参考: 创建简单的音乐播放器


异常被捕获的方法调用是哪个? - jackiszhp
2个回答

15

您需要重置播放器,同时必须设置setAudioStreamType,因此您的代码将如下所示

try 
{
    player.reset();
    player.setDataSource(getApplicationContext(), trackUri);
    player.setAudioStreamType(AudioManager.STREAM_MUSIC);
    player.prepareAsync();
}

4

我认为解决这个问题的关键是让人们知道状态列表:

  • 1: ?
  • 64: ?
  • 128: 播放完成。在播放完成后遇到128,之后调用stop和reset方法并没有在调用setDataSource之前被执行。我知道执行stop、reset、setDataSource、prepareAsync、start这个顺序是可以工作的。
  • ?: ?

如果我在不调用player.reset()的情况下再次播放,那么我会得到128。重置后错误消失了。 - LXJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接