Android - MediaPlayer error: attachnewplayer called in state 64

Android - MediaPlayer error: attachnewplayer called in state 64

我在下面 post 创建简单的音乐播放器,但是从列表中选择任何歌曲或从 MediaController 按 prev/next 会出现以下错误。我正在使用 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 error: attachnewplayer called in state 64

参考:Create Simple Music Player

您必须重置播放器,还必须设置 setAudioStreamType,因此您的代码如下所示

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

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

  • 1: ?
  • 64: ?
  • 128:回放完成。我遇到 128,播放完成后,在调用 setDataSource 之前不会调用停止和重置。我知道停止、重置、setDataSource、prepareAsync、开始的顺序是有效的。
  • ?: ?