gpt4 book ai didi

android - MediaPlayer 错误代码 (-38,0) getDuration

转载 作者:行者123 更新时间:2023-11-30 01:25:34 25 4
gpt4 key购买 nike

我目前正在尝试设计一个简单的应用程序来播放音乐播放器。我有歌曲的 URL,正在设置 MediaPlayer,如下所示。第一首歌曲一切正常,但当我播放另一首歌曲时,程序在模拟时没有崩溃,但没有播放任何内容,我收到以下错误:

E/MediaPlayer: Attempt to call getDuration without a valid mediaplayer
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)

PlayerService.java

public class MusicPlayerService extends Service {
private SongItem mSong;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mSong = ListSong.getListSong().get(ListSong.getSelectedItem());
registerLocalFilter();
playMedia();
return START_STICKY;
}

private void playMedia() {
if (handler == null) {
thread = new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
handler = new Handler();
handler.post(playAudioFromURL);
Looper.loop();
}
});
thread.start();
} else {
handler.post(playAudioFromURL);
}
}

private Runnable playAudioFromURL = new Runnable() {
@Override
public void run() {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(mSong.getSongUrl());
mediaPlayer.setOnPreparedListener(onPreparedListener);
mediaPlayer.setOnCompletionListener(onCompletionListener);
mediaPlayer.setOnSeekCompleteListener(onSeekCompleteListener);
mediaPlayer.setOnErrorListener(onErrorListener);
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
Log.w(TAG, "playAudioFromURL: " + e.toString());
} catch (IllegalArgumentException ex) {
Log.w(TAG, "playAudioFromURL: " + ex.toString());
} catch (IllegalStateException ex) {
Log.w(TAG, "playAudioFromURL: " + ex.toString());
}
}
};


private MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
ListSong.setPlaying(true);
sendLoadComplete();
updateTimer();
mp.start();
}
};
}

我已经在 onPrepared() 中编写了 mp.start() 并使用了 mediaPlayer.prepareAsync(); 类似 Media Player called in state 0, error (-38,0) 的解决方案但它不起作用。

请帮帮我!

最佳答案

mediaPlayer.setDataSource(mSong.getSongUrl()); 在 MediaPlayer mediaPlayer.reset(); 之前,它可能会解决您的问题。

关于android - MediaPlayer 错误代码 (-38,0) getDuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36471995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com