2016-02-08 12 views
5

Używam układu Układ główny/szczegółowy w tablecie, po lewej stronie kilka przycisków do otwierania kilku fragmentów, jeden z fragmentów zawiera odtwarzacz youtube.zamknij pełny ekran odtwarzacza YouTube na tylnym przycisku wewnątrz fragmentu

Problem

Gdy odtwarzacz YouTube jest pełen ekran, i naciśnij przycisk nazad, aktywnośćonBackPressed nazywa, a cała działalność jest zamknięta.

Co próbowałem,

1- Dodano KeyListener dla fragmentu nadrzędnego (który zawiera Youtube Fragment) i uchwyt podczas kliknięcia na przycisk Wstecz, ale słuchacz nazywa się tylko wtedy, gdy gracz nie jest na pełnym ekranie , inaczej nie nazywa,

rootView.setFocusableInTouchMode(true); 
     rootView.requestFocus(); 
     rootView.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
        try { 
         // Close full screen 
         return true; 
        } catch (Exception e) { 
         AHHExceptionHandler.handleException(e); 
        } 
       } 
       return false; 
      } 
     }); 

2- Dodany onKeyListener do youtubeFragment View, by sprawdzić, czy jest pełny ekran następnie zamknij trybie pełnoekranowym

youTubeFragment.getView().setFocusableInTouchMode(true); 
youTubeFragment.getView().requestFocus(); 
    youTubeFragment.getView().setOnKeyListener(new View.OnKeyListener() { 
               @Override 
               public boolean onKey(View v, int keyCode, KeyEvent event) { 
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
                 try { 
                  youTubePlayer.setFullscreen(false); 
                  return true; 
                 } catch (Exception e) { 
                  AHHExceptionHandler.handleException(e); 
                 } 
                } 
                return false; 
               } 
              }); 

I to również nie jest wywoływane we wszystkich przypadkach.

Muszę obsłużyć tylny przycisk sprzętu, gdy odtwarzacz YouTube jest w trybie pełnoekranowym, tryb pełnoekranowy jest zamknięty, a aplikacja jest w poprzednim stanie.

Dzięki.

Edit 1: - Chcę się tym zająć wewnątrz fragmentu, zamiast obsługiwać go w działalności macierzystej, ja już posługiwaniu się nim wewnątrz aktywności macierzystej, ale nie podoba mi się to rozwiązanie.

+0

Znalazłeś rozwiązanie to inny niż to, co opisano tutaj lub dodanie youtube specyficzny kod w Działaniu onBackPressed? – ashishduh

+1

Nie, nie mogłem znaleźć innego rozwiązania –

Odpowiedz

2

Możesz zastąpić onBackPressed() w swojej działalności, a jeśli Twój odtwarzacz jest w trybie pełnoekranowym, możesz go tutaj obsłużyć i wywołać NOT super.onBackPressed().

Jeśli to nie jest pełnoekranowe, zadzwoń do super.onBackPressed().

+0

Działanie nie ma związku z odtwarzaczem youtube, odtwarzacz youtube jest wewnątrz fragmentu, I nie chcę tego obsługiwać w działaniu. Muszę zrobić kod niezależny, jak tylko mogę. –

+0

Odtwarzacz youtube jest powiązany z kontekstem aktywności. Życzymy powodzenia, aby znaleźć to, czego szukasz. –

0

Wystarczy dodać do odpowiedzi Andre.

W swojej działalności macierzystej dodać:

public YouTubePlayer youTubePlayer; 
public boolean isYouTubePlayerFullScreen; 

W swojej fragmentu dodać:

GVMainActivity mainActivity = (GVMainActivity) getActivity(); 

Następnie na YouTubePlayerFragment inicjalizacji:

@Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { 
     mainActivity.youTubePlayer = player; 
     player.loadVideo(videoId); 

     player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() { 
      @Override 
      public void onFullscreen(boolean b) { 
       mainActivity.isYouTubePlayerFullScreen = b; 
      } 
     }); 

    } 

Teraz twój Activity ma dostęp do YouTubePlayer i informacja, czy gracz jest na pełnym ekranie, czy nie.

Następnie wewnątrz Activity, zastępują onBackPressed takiego:

@Override 
public void onBackPressed() { 
    if (youTubePlayer != null && isYouTubePlayerFullScreen){ 
      youTubePlayer.setFullscreen(false); 
    } else { 
     super.onBackPressed(); 
    } 
} 
Powiązane problemy