2016-02-08 21 views
5

Sto usando Master/Detail layout in un tablet, sul lato sinistro pochi pulsanti per aprire diversi frammenti, uno dei frammenti contiene il player di YouTube.close fullscreen di Youtube Player sul pulsante back all'interno del frammento

Il problema,

Quando il player di YouTube è a schermo intero, e premo il tasto indietro, il attivitàonBackPressed si chiama, e l'intera attività è chiuso.

quello che ho provato,

1- Aggiunto il KeyListener per frammento genitore (che contiene il Youtube frammento) e gestire quando click sul pulsante indietro, ma questo ascoltatore è chiamato solo se il giocatore non è a schermo intero , altrimenti non si chiama,

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- Aggiunto onKeyListener a youtubeFragment View per controllare se è a schermo intero quindi chiudere la modalità a tutto schermo

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

E anche questo non viene chiamato in tutti i casi.

Ho bisogno di gestire il pulsante back dell'hardware mentre il player di youtube è a schermo intero, la modalità a schermo intero è chiusa e l'applicazione è nel suo stato precedente.

Grazie.

Edit 1: - voglio gestire questa all'interno del frammento, invece di gestirlo nel genitore Attività, ho già la movimentazione all'interno della attività di genitore, ma non mi piace questa soluzione.

+0

Hai trovato una soluzione per questo diverso da quello che hai descritto qui o l'aggiunta di codice youtube-specifico nel Activity onBackPressed? – ashishduh

+1

No, non sono riuscito a trovare un'altra soluzione –

risposta

2

È possibile sovrascrivere onBackPressed() nella propria attività e nel caso in cui il lettore sia a schermo intero è possibile gestirlo qui e chiamare NOT super.onBackPressed().

Se non è a schermo intero, chiamare super.onBackPressato().

+0

L'attività non ha alcuna relazione con il player di youtube, il player di youtube è all'interno del frammento e non voglio gestirlo nell'attività. Ho bisogno di rendere il codice indipendente come posso. –

+0

Il player di youtube è in relazione con il contesto delle attività. Auguro buona fortuna per trovare quello che stai cercando. –

0

Solo per aggiungere alla risposta di Andre.

nella vostra attività genitore aggiungere:

public YouTubePlayer youTubePlayer; 
public boolean isYouTubePlayerFullScreen; 

Nel frammento di aggiungere:

GVMainActivity mainActivity = (GVMainActivity) getActivity(); 

Poi, il YouTubePlayerFragment inizializzazione:

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

    } 

Ora il vostro Activity ha accesso a YouTubePlayer e informazioni se il giocatore è a schermo intero o meno.

successivo, all'interno del vostro Activity, ignorare onBackPressed come questo:

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