wake-up-neo.com

Android Media Player: Start im Status Fehler 4 (-38,0) aufgerufen

Dies ist der Code, der zum dynamischen Abrufen eines Dateinamens (.mp3) von einer anderen Klasse verwendet wird, da sich in meinem Assets-Ordner viele MP3-Dateien befinden:

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)

Zu beachtende Punkte: 1. Ich habe ähnliche Threads beim Stack-Überlauf überprüft. Die Antwort lautet "prepareAsync () 2". Ich habe prepareAsync () verwendet

Danke im Voraus.

19
D'yer Mak'er

Sie können auch die unten stehende onPrepared()-Methode verwenden, um die start-Methode aufzurufen, sodass start() aufgerufen wird, nachdem MediaPlayer vorbereitet wurde.

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

            mp.start();

        }
    });
20
nidhi_adiga

Anstatt diese preparedSync/prepare-Methode von MediaPlayer zu verwenden, können Sie den Dateipfad einfach in URI umwandeln an MediaPlayer.create() übergeben.

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

dies wird es vorbereiten und anfangen zu spielen

Oder eine andere Möglichkeit ist die Verwendung von onPrepareListener() von MediaPlayer und dann ab dem vorbereiteten Spielbeginn

2
Pratik

zustand 4 bedeutet, dass der Mediaplayer sich im Vorbereitungszustand befindet

und wir nennen andere Aktionen wie

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

oder irgendetwas anderes.

Gemäß Ihrem Code ist dies Mediaplayer.start();

sie müssen eine onprepare-Methode schreiben

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

Sobald die Onprepared () - Methode aufgerufen wurde, können Sie weitere Prozesse ausführen

einfach entfernen

mp.start() 

nach dem

mp.prepareAsync();

Und du wirst gut gehen

0
user6090074