尝试调用getDuration没有在Android的媒体播放器一个有效的媒体播放器媒体播放器、有效、getDuration、Android

2023-09-06 17:26:48 作者:相思无人诉

我是从SD卡与搜索栏播放的歌曲。同时获得歌曲的时间,我得到的尝试调用getDuration没有有效的媒体播放器和非法状态异常。文件名和路径是否有效one.i试过很长一段时间我无法得到解决方案。而如何将搜索栏边玩song.please帮助我。 我的code:

 按钮播放,暂停,停止;
搜索栏谋;
MediaPlayer的媒体播放器;
SurfaceView SV;
布尔IsPlaying模块= FALSE;

    play.setOnClickListener(新View.OnClickListener()
    {
        公共无效的onClick(视图v)
        {
            playsong(文件名);
        }
    });


私人无效playsong(字符串文件名2){
    尝试{
        Log.e(文件名2,文件名2);
        媒体播放器=新的MediaPlayer();
        mediaPlayer.setDataSource(文件名);
        seek.setMax(mediaPlayer.getDuration());
        媒体播放器prepare()。
        mediaPlayer.start();
        myHandler.post(银行经营);
        IsPlaying模块= TRUE;
        mediaPlayer.setOnCompletionListener(本);
    }
    赶上(例外前){
        Log.e(SD卡-ERR2:,+前);
    }

}

私人处理程序将myHandler =新的处理程序();
    最后的Runnable银行经营=新的Runnable()
    {
        公共无效的run()
        {
            如果(媒体播放器!= NULL)
            {
                如果(IsPlaying模块)
                {
                    尝试
                    {
                       INT currentPosition = mediaPlayer.getCurrentPosition();

                       seek.setProgress(currentPosition);

                    }赶上(例外五){
                        e.printStackTrace();
                    }

                    sv.postDelayed(银行经营,150);
                }
            }
        }

    };
 

我的日志猫错误:

  9月五号至17号:46:43.578:错误/文件名2(1670):/ SD卡/舞蹈Theme.mp3
九月五日至17日:46:43.594:ERROR / MediaPlayer的(1670):尝试调用getDuration没有一个有效的媒体播放器
九月五日至17日:46:43.594:ERROR / MediaPlayer的(1670):错误(-38,0)
九月五日至17日:46:43.594:ERROR / MediaPlayer的(1670):prepareAsync称为状态0
九月五日至17日:46:43.594:错误/ SD卡-ERR2:(1670):java.lang.IllegalStateException
九月五日至17日:46:43.594:ERROR / MediaPlayer的(1670):错误(-38,0)
 

解决方案 5 款值得拥有的 Linux 媒体播放器 Linux 中国

您可能会被要求getDuration之前,该文件是完全加载。看到,如果溶液为this问题适合你的。

i am playing song from sdcard with seek bar. while getting duration of song i get Attempt to call getDuration without a valid mediaplayer and illegal state exception. the filename and path is valid one.i tried long time i could not get solution. and how to move seek bar while playing song.please help me. my code:

Button play,pause,stop;
SeekBar seek;
MediaPlayer mediaPlayer;
SurfaceView sv;
boolean isPlaying = false;

    play.setOnClickListener(new View.OnClickListener() 
    {   
        public void onClick(View v) 
        {
            playsong(filename); 
        }
    });


private void playsong(String filename2) {
    try{
        Log.e("filename2",filename2);
        mediaPlayer = new  MediaPlayer();
        mediaPlayer.setDataSource(filename2);
        seek.setMax(mediaPlayer.getDuration());
        mediaPlayer.prepare();
        mediaPlayer.start();
        myHandler.post(runn);
        isPlaying = true;
        mediaPlayer.setOnCompletionListener(this);          
    }
    catch(Exception ex){
        Log.e("sdcard-err2:",""+ex);
    }

}

private Handler myHandler = new Handler();
    final Runnable runn = new Runnable()
    {
        public void run() 
        {
            if (mediaPlayer != null) 
            {
                if (isPlaying ) 
                {
                    try 
                    {
                       int currentPosition = mediaPlayer.getCurrentPosition();

                       seek.setProgress(currentPosition);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    sv.postDelayed(runn, 150);
                }
            }
        }

    };  

my log cat errors:

05-17 09:46:43.578: ERROR/filename2(1670): /sdcard/The Dance Theme.mp3
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Attempt to call getDuration without a valid mediaplayer
05-17 09:46:43.594: ERROR/MediaPlayer(1670): error (-38, 0)
05-17 09:46:43.594: ERROR/MediaPlayer(1670): prepareAsync called in state 0
05-17 09:46:43.594: ERROR/sdcard-err2:(1670): java.lang.IllegalStateException
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Error (-38,0)

解决方案

You might be calling getDuration before the file is fully loaded. See if the solution to this question works for you.