2017-07-17 53 views
7

Chcę zachować odtwarzanie w tle, gdy użytkownik zdecyduje się nacisnąć "dom" podczas filmu.Włączanie odtwarzania w tle na urządzeniu z Androidem TV

I przestrzegać instrukcji tutaj: https://developer.android.com/training/tv/playback/options.html

I napisał następujący kod (które działa):

@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(); 
} 

mam kilka pytań. Zauważyłem, że komentowanie na linii if (! requestVisibleBehind(true)) nie zwraca pożądanych wyników. Byłem bardzo zdezorientowany.

  1. Czy ta linia nie powinna zwracać wartości boolowskiej? Jak może włączyć odtwarzanie w tle? W przypadku debuggera wspomniane "if" zakończyło się sukcesem i zatrzymuje odtwarzacz. Nie bardzo wiem, co się dzieje i jak, więc może ktoś może mi wyjaśnić.
  2. requestVisibleBehind() jest @deprowany, więc jest onVisibleBehindCanceled(). Czy są jakieś alternatywy? Kiedy starałem się spojrzeć na to, co te funkcje trzymać, ja też zaskoczyła siebie, kiedy znalazłem (to samo dotyczy requestVisibleBehind().

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

W pewnym momencie, byłem pewien, że wynik odtwarzanie tło jest z inne akcje, ale kiedy skomentuję kod rozdrobniony wcześniej, nie otrzymuję pożądanego wyniku (dostaję go, jeśli go nie komentuję).

+0

, czy kod działa, co rzeczywiście chcesz –

+1

Jeśli wykomentuj 'if (! RequestVisibleBehind (true))' i związany z nim zamykanie nawiasów, następnie linia 'stopPlayback()' będzie wywołany (który zatrzymuje odtwarzanie) FWIW ... – rogerdpack

+0

Ten link może być pomocny: http://corochann.com/android-tv-application-hands-on-tutorial-9-195.html –

Odpowiedz

2

Nie wiem, czy rozumiem poprawnie, kim jesteś Zgodnie z google the requestVisibleBehind(true) prosi Android OS, że w przypadku pójścia w tle to działanie powinno nadal być odtwarzane, boolean to powtarza ns jest, jeśli możesz liczyć na to, że będzie dostępny, aby kontynuować grę, czy nie (decyduje system operacyjny). Odnośnie numeru onVisibleBehindCanceled() jest on wywoływany, gdy aplikacja zostanie zakończona przez użytkownika lub system operacyjny, lub gdy requestVisibleBehind zwróci false i zasadniczo to, co robi, da ci 500 ms na pozbycie się wszystkich zasobów używanych przez twoją aplikację, po tych 500 ms system operacyjny zniszczy twoje działalność w celu uwolnienia tych zasobów. Podsumowując, to właśnie te osoby, które są odpowiedzialne za Twoją aplikację, nadal grają w tle. Jeśli chodzi o wycofanie, pamiętaj, że Android O jest wyposażony w możliwość korzystania z PIP, więc może to jest powód tej zmiany.

Nadzieję, że pomogło

+0

Dzięki, na Android TV możesz nie chcieć używać PIP, ale nadal wyświetlać cały film w tle. – Hrk