2012-08-09 2 views
12

Sto riscontrando problemi con MediaPlayer di Android. Sembra che manchi funzionalità importanti, principalmente un modo per ottenere lo stato corrente di MediaPlayer o per scoprire se è pronto. So che c'è l'ascoltatore preparato, ma MediaPlayer dura più a lungo dell'attività, quindi quando riprende l'attività di riproduzione, sarebbe bello ottenere lo stato attuale del lettore, indipendentemente dal fatto che stia tentando di caricare i media, se il supporto è caricato, ecc. Mi manca qualcosa o devo tenere traccia degli stati del giocatore stesso?MediaPlayer Android: esiste un metodo "isPrepared()" o "getStatus()"?

Altre funzionalità che sarebbero carine sarebbero onPlayStateChanged() - Al momento devo tenere traccia dello stato di riproduzione manualmente. Sto sbagliando?

risposta

11

Spero che non sia troppo tardi per una risposta. La classe MediaPlayer non ha un metodo isPrepared() o un metodo getStatus() e tu devi tenerne traccia da solo. Tuttavia, non è così difficile.

La classe MediaPlayer ha un buon diagramma di stato che aiuta davvero. Dovresti implementare il tuo servizio basato su quel diagramma. Inoltre, se controlli sempre l'oggetto MediaPlayer dallo stesso thread, è facile tenere traccia del suo stato, quindi ti consiglio di farlo. Il metodo prepareAsync() è l'unico metodo asincrono di cui ci si deve occupare, ma è possibile mantenere un valore booleano che indica che il lettore è in fase di preparazione, che sarebbe "true" dalla chiamata prepareAsync() fino a quando onPrepared() non è chiamato. In ogni caso, è sempre possibile implementare onError e catturare l'IllegalStateException per evitare arresti anomali se si invoca accidentalmente qualsiasi metodo da uno stato illegale.

Tuttavia, il media playback guide mi ha aiutato molto.

+8

Contrassegnare come risposta accettata. La triste realtà è che Android per la riproduzione/il consumo dei media è davvero carente e mancano anche funzionalità di base come il recupero dello stato. Il modo migliore per farlo è scrivere un wrapper attorno all'oggetto MediaPlayer e memorizzare lo stato tu stesso. – StackOverflowed

+5

Mi sono imbattuto in questo problema. Una supervisione così ridicola, data la sensibilità dei suoi metodi allo stato attuale. –

7

avevo bisogno di vedere lo stato durante il debug per risolvere un problema, così ho appena messo questo codice da qualche parte dopo Sapevo che il MediaPlayer era stato preparato:

try { 
    this.audioPlayer.prepare(); 
} catch (Exception e) { 
} 

che consente di stampare un errore alla console come "E/MediaPlayer: prepareAsync chiamato nello stato 32. "

Ora se riuscissi a trovare un posto in cui sono elencati tutti i codici di stato ...

+0

Mi stavo chiedendo se si conosce l'elenco dei codici di stato. :) – Talha