2016-08-11 5 views
0

Est-il possible d'obtenir le média en cours de lecture au VideoCastManager avant de vous déconnecter de la distribution? Je souhaite enregistrer la dernière progression du média actuel lorsque l'utilisateur se déconnecte manuellement de la distribution. J'ai utilisé VideoCastCosumer la méthode onDisconnected() mais il jette une exception. Je ne sais pas quel genre d'exception parce que mon journal ne montre que ceci:Obtenir la position actuelle du média avant de se déconnecter de la distribution

System.err: at com.economist.newton.mobile.ui.activity.BaseCastActivity$1.onDisconnected (MyCastActivity.java:81) 

Cette ligne contient la ligne suivante dans la méthode onDisconnected():

try { 
     if(castManager.getCurrentMediaPosition() > 30000){ // <-here error occurs 
       ... 
     } 
} catch (TransientNetworkDisconnectionException | NoConnectionException e) { 
     e.printStackTrace(); 
} 

Si elle une aide, la variable castManager est déclarée onCreate():

castManager = VideoCastManager.getInstance(); 

bibliothèque compagnon Cast: com.google.android.libraries.cast.companionlibrary:ccl:2.8.4

Répondre

1

Il y a plusieurs façons de le faire. Celui que je pense serait le plus facile est d'avoir un composant qui implémente ProgressWatcher (de CCL). Dans cet écouteur, setProgress(int currentPosition, int duration) sera appelé toutes les secondes et il aura le currentPosition du flux comme premier argument. Vous pouvez mettre en cache cette valeur (elle ne sera pas mise à jour si votre appareil est déconnecté) afin de vous fournir une information en temps réel sur la position actuelle. Ainsi, par exemple, si votre activité implémente cette interface:

public MyActivity extends AppCompatActivity implements ProgressWatcher { 
    private int mCurrentStreamPosition; 

    public onStart() { 
     .... 
     mCastManager.addProgressWatcher(this); 
     .... 
    } 

    public onStop() { 
     .... 
     mCastManager.removeProgressWatcher(this); 
     .... 
    } 

    public setProgress(int currentTime, int duration) { 
     mCurrentStreamPosition = currentTime; 
    } 

    public int getCurrentStreamPosition() { 
     return mCurrentStreamPosition; 
    } 
    .... 
} 

donc chaque fois que vous voulez, vous pouvez alors appeler getCurrentStreamPosition() (par exemple, vous pouvez l'appeler en onDisconnected()) pour obtenir la dernière position/de flux en cours. Notez que selon la structure de votre application, vous pouvez décider d'enregistrer/désinscrire votre ProgressWatcher dans onResume()/onPause() ou onCreate()/onDestroy(). Les choses importantes sont de s'assurer que vous l'annulez pour éviter de perdre la mémoire.

+0

ce qui est la meilleure façon de réaliser la même chose avec Google Cast v3 (sans bibliothèque du CCA?) –

0

Pour Castv3, vous pouvez remplacer onSessionEnding de SessionManagerListener et obtenir le mRemoteMediaClient.getMediaStatus().getStreamPosition()