Dal momento in cui crei l'istanza MediaPlayer al momento in cui la richiami (riutilizzi o rimuovi), questa istanza completa una serie di transizioni tra stati.
Alcune operazioni sono consentite solo quando il lettore si trova in uno stato particolare. Ad esempio, la chiamata a play
in IDLE
non è consentita. Puoi chiamare questo stato solo dopo che il lettore ha raggiunto lo stato PREPARED
.
Per lavorare con gli stati:
È possibile recuperare lo stato corrente dell'oggetto MediaPlayer
con MediaPlayer.getStatus
.
PlayerState getStatus() throws IllegalStateException;
L’elenco degli stati è definito in MediaPlayer.PlayerState
.
Diagramma di transizione dello stato per il ciclo di vita di un'istanza MediaPlayer
:
La tabella seguente fornisce ulteriori dettagli:
MediaPlayer.PlayerState | Si verifica quando |
---|---|
INATTIVO | L'applicazione ha richiesto un nuovo lettore multimediale chiamando DefaultMediaPlayer.create . Il lettore appena creato è in attesa di specificare un elemento del lettore multimediale. Questo è lo stato iniziale del lettore multimediale. |
INIZIALIZZAZIONE | L'applicazione ha chiamato MediaPlayer.replaceCurrentItem e il lettore multimediale è in fase di caricamento. |
INIZIALIZZATO | TVSDK: impostazione dell'elemento del lettore multimediale completata. |
PREPARAZIONE | L'applicazione ha chiamato MediaPlayer.PrepareToPlay . Il lettore multimediale sta caricando l'elemento del lettore multimediale e le risorse associate. Suggerimento: Potrebbe verificarsi un buffering del supporto principale. TVSDK sta preparando il flusso multimediale e sta tentando di eseguire la risoluzione degli annunci e l'inserimento di annunci (se abilitato). Suggerimento: Per impostare l'ora di inizio su un valore diverso da zero, chiama PrepareToPlay(startTime) con l'ora in millisecondi. |
PREPARATO | Il contenuto è preparato e gli annunci sono stati inseriti nella timeline oppure la procedura dell’annuncio non è riuscita. È possibile iniziare il buffering o la riproduzione. |
GIOCO | L'applicazione ha chiamato play , quindi TVSDK sta tentando di riprodurre il video. Potrebbe verificarsi un buffering prima che il video venga effettivamente riprodotto. |
IN PAUSA | Quando l'applicazione riproduce e mette in pausa il contenuto multimediale, il lettore multimediale passa da questo stato a PLAYING. |
SOSPESO | L'applicazione si è allontanata dalla riproduzione, ha spento il dispositivo o ha spento le applicazioni durante la riproduzione o la pausa del lettore. Il lettore multimediale è stato sospeso e le risorse sono state rilasciate. Per continuare, ripristinare il lettore multimediale. |
COMPLETO | Il lettore ha raggiunto la fine del flusso e la riproduzione si è arrestata. |
RILASCIATO | L'applicazione ha rilasciato il lettore multimediale, che rilascia anche le risorse associate. Non puoi più utilizzare questa istanza |
ERRORE | Errore durante il processo. Un errore potrebbe influire anche sulle operazioni che l'applicazione può eseguire in seguito. |
È possibile utilizzare lo stato per fornire un feedback sul processo (ad esempio, un’icona che ruota in attesa della modifica dello stato successivo) o per effettuare il passaggio successivo durante la riproduzione del file multimediale, ad esempio per attendere lo stato appropriato prima di chiamare il metodo successivo.
Ad esempio:
@Override
public void onStateChanged(MediaPlayer.PlayerState state,
MediaPlayerNotification notification) {
switch (state) {
// It is recommended that you call prepareToPlay() after receiving
// the INITIALIZED state.
case INITIALIZED:
_mediaPlayer.prepareToPlay();
break;
case PREPARING:
showBufferingSpinner();
break;
case PREPARED:
hideBufferingSpinner();
.....
}
}