Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Media Player: Start called in state 4 error(-38,0)

This is the code am using to fetch a file name(.mp3) dynamically from some other class as am having many mp3 files in my assets folder:

playAudioButton.setOnClickListener(new OnClickListener() {


            @Override
            public void onClick(View v) 
            {
                FileName audio=new FileName();
                String audioName=audio.getAudioName(count).toString();
                if(audioName=="NO Audio")
                {

                    Toast.makeText(getApplicationContext(), "No Audio for this page", Toast.LENGTH_SHORT).show();

                }
                else
                {

                    try {
                        afd=getAssets().openFd(audioName + ".mp3");
                        mp = new MediaPlayer();
                        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                        mp.prepareAsync();
                        mp.start();

                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }




            }
        });


    }

Log Cat :

03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-20 11:22:24.968: D/libEGL(4579): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
03-20 11:22:24.976: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
03-20 11:22:24.984: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
03-20 11:22:25.070: D/OpenGLRenderer(4579): Enabling debug mode 0
03-20 11:22:38.773: E/MediaPlayer(4579): start called in state 4
03-20 11:22:38.773: E/MediaPlayer(4579): error (-38, 0)
03-20 11:22:38.773: E/MediaPlayer(4579): Error (-38,0)

Points to be noted: 1. I have checked similar threads on stack overflow the answer is using prepareAsync() 2. I have used prepareAsync()

Thanks in advance.

like image 973
D'yer Mak'er Avatar asked Mar 20 '13 06:03

D'yer Mak'er


3 Answers

You can also use below onPrepared() method to call start method so that start() is called after MediaPlayer is prepared.

mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub

            mp.start();

        }
    });
like image 54
nidhi_adiga Avatar answered Oct 30 '22 16:10

nidhi_adiga


Instead of using this preparedSync/prepare method of MediaPlayer you can just pass the file path converting into URI to the MediaPlayer.create()

MediaPlayer mediaPlayer = MediaPlayer.create(context, URI.parse("file://"+filePath));

this will prepare it and start playing itself

Or another way is use onPrepareListener() of MediaPlayer and then from this on prepared start playing

like image 26
Pratik Avatar answered Oct 30 '22 16:10

Pratik


state 4 means Mediaplayer is in preparing state

and we call other actions like

Mediaplayer.start() 
Mediaplayer.stop() 
Mediaplayer.pause() 

or any other thing .

As per your code it is Mediaplayer.start();

you need to write onprepare method

MediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp.start();
        }
    });

Once Onprepared() method called you can do further process

just remove

mp.start() 

after

mp.prepareAsync();

And you will good to go

like image 1
user6090074 Avatar answered Oct 30 '22 15:10

user6090074