安卓音乐播放器,第一次音乐播放时mediaplayer.getduration()都是正常的,但是切换音乐(第二次音乐播放)时就会提示:
E/MediaPlayer: Attempt to call getDuration without a valid mediaplayer
E/MediaPlayer: error (-38, 0)
在代码中,明明已经setOnPreparedListener了,照理说不prepare好的时候是不会执行start和getduration的,第一首歌播放也是好好的,切换个音乐就不行
try {
if(player.isPlaying()){
player.reset();
}
//player=new MediaPlayer();
player.setDataSource(getApplicationContext(),uri);
player.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
if(timer==null){
timer=new Timer();//创建计时器对象
TimerTask task=new TimerTask() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void run() {
if (player!=null ) {
int duration = player.getDuration();//获取歌曲总时长
int currentPosition = player.getCurrentPosition();//获取播放进度
注释掉get duration相关部分后,切换歌曲都播放正常,就是加上getduration功能就不行
getDuration方法不能获取到网络视频的整个时长,获取player.setDataSource(getApplicationContext(),uri);在这里你还想下办法,传入文件输入流试试
1.先确保URI的可用性;
2.切换歌曲时,先stop,再重新setDataSource->prepareAsync->...->start