2013-03-28 8 views
11

Ho letto tutto il modo di lasciare schermo intero da un video di YouTube è premendo indietro, ma nel mio Activity non funziona in questo modo ma io ' mi piacerebbeAndroid: quando guardo un video a schermo intero di YouTube torno indietro e l'attività termina

vi posto il codice:

public class MainActivity extends YouTubeFailureRecoveryActivity { 
    public static String prefix = "https://gdata.youtube.com/feeds/api/playlists/"; 
    public static String sufix = "?v=2&alt=jsonc"; 

    private String myPlayList = "PLZGKlf2ZwY7ua0C2oeUaXQKeLKNGy3mkh"; 

    private VideosListFragment videosFragment; 

    // The next video to play 
    private Video actualVideo; 

    // This is the handler that receives the response when the YouTube read 
    private Handler responseHandler; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     videosFragment = (VideosListFragment) getFragmentManager().findFragmentById(R.id.videosListView); 
     getUserYouTubeFeed(); 

    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, 
      YouTubePlayer player, boolean wasRestored) { 
     if (!wasRestored) { 
      player.loadVideo(actualVideo.getVideoId()); 
     } 
    } 

    @Override 
    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
     return (YouTubePlayerFragment) getFragmentManager().findFragmentById(
       R.id.youtube_fragment); 
    } 

    public void getUserYouTubeFeed() { 
     responseHandler = new Handler() { 
      public void handleMessage(Message msg) { 
       populateListWithVideos(msg); 
      }; 
     }; 
     // We start a new AsyncTask that does its work on its own thread 
     // We pass in a handler that will be called when the task has finished 
     LoadPlayListElements bgTask = new LoadPlayListElements(responseHandler); 
     bgTask.execute(myPlayList); 

    } 

    /** 
    * This method retrieves the Library of videos from the task and passes them 
    * to our ListView 
    * 
    * @param msg 
    */ 
    private void populateListWithVideos(Message msg) { 
     Library lib = (Library) msg.getData().get(
       LoadPlayListElements.LIBRARY); 
     VideosAdapter videos = new VideosAdapter(this, lib.getVideos()); 
     videosFragment.setListAdapter(videos); 
    } 

    @Override 
    protected void onStop() { 
     // Make sure we null our handler when the activity has stopped 
     responseHandler = null; 
     super.onStop(); 
    } 

    public void setVideo(Video _item, boolean _activate) { 
     actualVideo = _item; 
     if (_activate){ 
      YouTubePlayerFragment fragment = (YouTubePlayerFragment) getFragmentManager() 
        .findFragmentById(R.id.youtube_fragment); 
      if (fragment != null && fragment.isInLayout()) { 
       fragment.initialize(DeveloperKey.DEVELOPER_KEY, this); 
      } 
     } 
    } 
} 

e il layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" > 

    <fragment 
     android:id="@+id/videosListView" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_marginTop="?android:attr/actionBarSize" 
     class="com.vivoenmimundo.sc2hotsepicreplays.ui.phone.fragment.VideosListFragment" > 
    </fragment> 

    <fragment 
     android:name="com.google.android.youtube.player.YouTubePlayerFragment" 
     android:id="@+id/youtube_fragment" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:layout_gravity="center_vertical"/> 
</LinearLayout> 

Qualche idea? Ho provato a non fare nulla di strano, basta copiare/incollare dagli esempi di API di YouTube.

+0

Sembra un comportamento corretto che quando si preme di nuovo, l'onStop o onDestory è chiamato e l'attività viene distrutta . http://developer.android.com/training/basics/activity-lifecycle/stopping.html – YankeeWhiskey

risposta

25

E 'stato, come detto prima, il comportamento corretto - perché il giocatore era all'interno di un frammento, ho dovuto prendere il pulsante indietro con:

@Override 
public void onBackPressed() { 
    if (fullScreen){ 
     videoPlayer.setFullscreen(false); 
    } else{ 
     super.onBackPressed(); 
    } 
} 

e impostare il mio booleano "fullScreen" come this:

@Override 
public void onInitializationSuccess(YouTubePlayer.Provider provider, 
     YouTubePlayer player, boolean wasRestored) { 
    if (!wasRestored) { 
     showPlayer(); 
     videoPlayer = player; 
     videoPlayer.setOnFullscreenListener(new OnFullscreenListener() { 

      @Override 
      public void onFullscreen(boolean _isFullScreen) { 
       fullScreen = _isFullScreen; 
      } 
     }); 
     videoPlayer.loadVideo(actualVideo.getVideoId()); 
    } 
} 

grazie a tutti!

+1

come accedi a videoPlayer nel tuo metodo onBackPressed? Ho provato lo stesso, ma sto ottenendo questo NullPointerException: tentativo di invocare il metodo di interfaccia 'void com.google.android.youtube.player.YouTubePlayer.setFullscreen (booleano)' su un oggetto nullo di riferimento – saintjab

+0

metti oggetto videoplayer in una variabile di campo all'interno del metodo onInitializationSuccess –

0

Si potrebbe provare a rilevare il pulsante indietro premere e personalizzare definire ciò che fa.

// Sets functionality of the hard buttons on the device 
@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // Custom define what you want to happen 
    } 
    return true; 
} 
2

Step1: Seguire Rispondere 16 da Nhano

Step2: aggiungere sotto la linea nel tag Menifest YoutubeActivity.

android: configChanges = "orientamento | Screensize"

questa soluzione ha funzionato per me ..