Sicheres Zurücksetzen eines MediaPlayers im Vorbereitungsstatus?

8

Ich schreibe mit dem MediaPlayer einen Audioplayer, mit dem der Benutzer die eigentliche Melodie überspringen kann. Eine Überspringungsanforderung kann jederzeit auftreten, auch zwischen einem Aufruf von MediaPlayer.prepareAsync und dem bevorstehenden onPrepared-Rückruf. Der Arzt sagt:

Es ist wichtig zu beachten, dass der Status Vorbereiten ein vorübergehender Status ist und das Verhalten beim Aufrufen einer Methode mit Nebeneffekt, während sich ein MediaPlayer-Objekt im Status Vorbereiten befindet, nicht definiert ist.

Beinhaltet das Anrufe zum Zurücksetzen oder sogar zum Freigeben? Denn wenn es so wäre, müsste ich entweder auf den OnPrepared Callback warten, um den MediaPlayer wiederzuverwenden oder einen brandneuen MediaPlayer zuweisen, wenn ich nicht den veralteten OnPrepared Callback warten und freigeben möchte, oder?

    
Simon 11.02.2011, 17:08
quelle

3 Antworten

3

Meiner Meinung nach werde ich den Ratschlägen in der Dokumentation folgen, ich habe mehrere Probleme mit dem Player in verschiedenen Geräten (in einigen Geräten ist nicht stabil, den gleichen Player überhaupt zu verwenden) gefunden.

Ich denke, eine gute Option ist, die Spieler zuzuteilen und zwischen ihnen zu wechseln, wenn der Benutzer eine Melodie überspringt, dann wartest du darauf, dass der ursprüngliche Spieler in den vorbereiteten Zustand kommt und du ihn dann sicher zurückstellst.

    
Lucas S. 11.02.2011, 17:14
quelle
5

Ich baute auch einen Stream-Musik-Player und kämpfte mit dem vorbereitenden Zustand. Der schlimmste Teil davon war, dass es einige Streams gab, in denen prepare () immer daran gehindert wurde, Daten herunterzuladen (puffern), ohne jemals onBufferUpdate aufzurufen. Berufungserklärung hat nichts getan. Also, die Art, wie ich es gemacht habe, rief reset () auf dem festgefahrenen MediaPlayer von einem anderen Thread nach 15 Sekunden auf, trotz der Empfehlungen in den Dokumenten. Dadurch wurde eine Ausnahme ausgelöst und in den Fehlerzustand versetzt. Nachdem ich die Ausnahme abgefangen hatte, rief ich release () an. Dies scheint das Problem gelöst zu haben. Ich hoffe, dass dies für jemanden nützlich sein wird.

    
Puiu Ioan 30.12.2011 23:20
quelle
-1

Ich stehe vor einem Problem, wenn MP beim Vorbereiten des Zustands zu lange "hängt" (stream) und ich versuche, es mit reset () zu stoppen. Dies führt dazu, dass MP hängt und damit meine gesamte App einfriert. Scheint so, als ob es keine Möglichkeit gibt, MP bei der Vorbereitung des Zustands zu stoppen. Ich denke über Verwendung Prepare () in Thread statt prepareAsync () verpackt. Dann kann ich diesen Thread töten. Für jetzt tat ich es in folgender Weise:

%Vor%

und es funktioniert 4me.

    
Stan 09.08.2011 09:17
quelle

Tags und Links