2017-07-17 1 views
7

Je souhaite conserver la lecture en arrière-plan lorsque l'utilisateur décide d'appuyer sur «home» pendant le film.Activation de la lecture en arrière-plan sur Android TV

J'ai suivi le guide ici: https://developer.android.com/training/tv/playback/options.html

Et écrit le code suivant (qui fonctionne):

@Override 
public void onPause() { 
    super.onPause(); 
    if (mVideoView.isPlaying()) 
    { 
     // Argument equals true to notify the system that the activity 
     // wishes to be visible behind other translucent activities 
     if (! requestVisibleBehind(true)) { 
      // App-specific method to stop playback and release resources 
      // because call to requestVisibleBehind(true) failed 
      stopPlayback(); 
     } 
    } else { 
     // Argument equals false because the activity is not playing 
     requestVisibleBehind(false); 
    } 
} 

@Override 
public void onVisibleBehindCanceled() { 
    // App-specific method to stop playback and release resources 
    stopPlayback(); 
    super.onVisibleBehindCanceled(); 
} 

J'ai quelques questions. J'ai trouvé que commenter la ligne if (! requestVisibleBehind(true)) ne retourne pas les résultats voulus. J'étais plutôt confus.

  1. Cette ligne ne devrait-elle pas renvoyer une valeur booléenne? Comment peut-il activer la lecture en arrière-plan? Avec le débogueur, mentionné "si" est réussi et il arrête le joueur. Pas vraiment sûr de ce qui se passe et comment, alors peut-être que quelqu'un peut m'expliquer.
  2. requestVisibleBehind() est @deprecated, de même que onVisibleBehindCanceled(). Y a-t-il des alternatives? Quand j'ai essayé de regarder dans ce que ces fonctions tiennent, je me suis aussi surpris quand j'ai trouvé (même pour requestVisibleBehind().

    public void onVisibleBehindCanceled() 
    { 
        throw new RuntimeException("Stub!"); 
    } 
    

À un moment donné, je me doutais bien que résultat de la lecture de fond est de d'autres actions, mais quand je commente le code fragmenté précédemment mentionné, je n'obtiens pas le résultat voulu (que j'obtiens si je ne le commente pas)

+0

si votre code fonctionne ce que vous voulez réellement –

+1

Si vous commentez 'if (! RequestVisibleBehind (true))' et son accolade fermante associée, puis la ligne 'stopPlayback()' sera appelé (qui arrête la lecture) FWIW ... – rogerdpack

+0

Ce lien peut vous être utile: http://corochann.com/android-tv-application-hands-on-tutorial-9-195.html –

Répondre

2

Je ne sais pas si je comprends bien ce que vous êtes Selon google les demandes requestVisibleBehind(true) à Android OS que dans le cas d'aller à l'arrière-plan cette activité devrait continuer à jouer, le booléen il revient ns est si vous pouvez compter sur lui étant disponible pour continuer à jouer ou non (c'est décidé par l'OS). En ce qui concerne onVisibleBehindCanceled() il est appelé lorsque l'application est terminée soit par l'utilisateur ou le système d'exploitation ou lorsque le requestVisibleBehind a renvoyé faux et essentiellement ce qu'il fait vous donne 500ms pour disposer de toutes les ressources utilisées par votre application, après ces 500ms le système d'exploitation détruira votre activité afin de libérer ces ressources. Donc, en résumé, ce sont les responsables de votre application qui continuent à jouer en arrière-plan. En ce qui concerne la dépréciation, n'oubliez pas que Android O vient avec la possibilité d'utiliser PIP alors peut-être que c'est la raison de ce changement.

L'espoir a aidé

+0

Merci, sur Android TV vous pouvez ne pas vouloir utiliser PIP, mais toujours afficher la vidéo complète en arrière-plan. – Hrk