3 Stimmen

MediaPlayer isPlaying() gibt immer false zurück

Ich teste auf 2 Telefonen. In einem Gerät isPlaying() von mediaplayer immer falsch zurückgeben, auch wenn es spielt. aber in anderen Gerät (lg optimus gingerbread) isPlaying() gibt true ist es spielt sonst falsch zurück.

Kann mir jemand sagen, warum das so ist? Mein Code hängt von diesem isPlaying()-Teil ab und ich möchte, dass es auf allen Geräten funktioniert.

public void addSoundMedia(Context context, int resId){
    MediaPlayer mp = MediaPlayer.create(context, resId);
    mp.setVolume(1.0f, 1.0f);
    try{
    mPlayerList.add(mp);
    }
    catch(Exception e){}
}

public void playSoundMedia(int index){
    try{        
    mPlayerList.get(index).start();         
    }
        catch(Exception e){}
}

public MediaPlayer getPlayer(int index){
    return mPlayerList.get(index);
}

Jetzt rufe ich an

mPlayer.getPlayer(currentPlayingPhraseIndex).isPlaying(); 
//which is now returning false. Previously i was returning true but now it always return false

Und ich habe auch das Objekt angepasst, Dies ist das Codeszenario jetzt:

int phraseIndexToBePlayed = getRandomInteger(0, numberOfPhrasesSelected-1, randomPhraseGen); //get random index from 0 to (size of arraylist where i added my media) -1
currentPlayingPhraseIndex = phraseIndexToBePlayed; //for later use in another function scope

mPlayer.playSoundMedia(phraseIndexToBePlayed);

Ich habe auch überprüft, ob beide Medien gleich sind.

mPlayer.getPlayer(currentPlayingPhraseIndex).equals(mPlayer.getPlayer(phraseIndexToBePlayed)); //it returns true so they are both same media

Danke.

5voto

Chad Schultz Punkte 7600

Der MediaPlayer ist sehr merkwürdig und sehr anfällig. Sie können nur sehr wenig tun, um festzustellen, in welchem Zustand er sich befindet - und alles, was Sie wissen, könnte am Ende falsch sein.

Nebenbei bemerkt, habe ich festgestellt, dass Eclipse manchmal Anwendungen dazu bringen kann, SEHR seltsame, unerklärliche Dinge zu tun. Bereinigen Sie das Projekt und starten Sie Eclipse neu, deinstallieren Sie die Anwendung und installieren Sie sie neu, um diese wirklich seltsamen Dinge zu beheben.

Wenn Sie mit MediaPlayer arbeiten, verfolgen Sie selbst, was er tun sollte, und vertrauen Sie niemals darauf, dass MediaPlayer sich in demselben Zustand befindet, in dem Sie ihn verlassen haben. Jedes Mal, wenn du irgendetwas mit dem MediaPlayer machst, sei auf die schöne IllegalStateException vorbereitet - vielleicht wurde er gerade abgespielt, vielleicht war er vorbereitet, vielleicht war er pausiert, aber du solltest darauf vorbereitet sein, dass er sich zu jedem Zeitpunkt im falschen Zustand befinden könnte. Wenn Sie Ihren Code auf diese Weise schreiben, sind Sie weniger darauf angewiesen, dass isPlaying() korrekt ist.

Ich weiß, das ist nicht sehr hilfreich, aber leider haben wir nicht viele Alternativen zu MediaPlayer.

1voto

dhaag23 Punkte 6076

Wenn wir schon beim allgemeinen Thema MediaPlayer sind, beachten Sie bitte, dass isPlaying() eine ANR verursachen kann, wenn sie im UI-Thread aufgerufen wird. Google empfiehlt sogar, alle MediaPlayer-Aufrufe von einem Hintergrund-Handler-Thread auszuführen. Dadurch wird auch die Ausführung von MediaPlayer-Aufrufen serialisiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X