2013-03-28 16 views
11

Przeczytałem, że opuszczenie pełnego ekranu z filmu z YouTube polega na ponownym naciśnięciu, ale w moim Activity to nie działa w ten sposób, ale " Chciałbym to zrobić.Android: Podczas oglądania wideo w formacie pełnoekranowym na youtube cofam i kończę działanie

zamieścić Ci kod:

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

i układ:

<?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> 

jakiś pomysł? Starałem się nie robić nic zbyt dziwnego, wystarczy skopiować/wkleić z przykładów interfejsu API YouTube.

+0

Wygląda poprawnego zachowania, które po naciśnięciu nazad, OnStop lub onDestory nazywa i aktywność jest zniszczona . http://developer.android.com/training/basics/activity-lifecycle/stopping.html – YankeeWhiskey

Odpowiedz

25

Była to, jak powiedziałem wcześniej, poprawne zachowanie - ponieważ gracz był wewnątrz fragmentu, musiałem złapać przycisk wstecz z:

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

i ustawić moje „fullScreen” logiczną jak to:

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

dziękuję wszystkim!

+1

jak uzyskać dostęp do videoPlayer w metodzie onBackPressed? Próbowałem zrobić to samo, ale otrzymuję ten wyjątek NullPointerException: próba wywołania metody interfejsu 'void com.google.android.youtube.player.YouTubePlayer.setFullscreen (boolean)' na obiekcie o wartości zerowej – saintjab

+0

umieszcza obiekt typu videoplayer w zmiennej terenowej wewnątrz metody onInitializationSuccess –

0

Możesz spróbować wykryć naciśnięcie przycisku Wstecz i określić, co robi.

// 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

Krok 1: Wykonaj 16 Odpowiedź przez Nhano

Krok 2: dodaj poniżej linii w tagu Menifest YoutubeActivity.

android: configChanges = „orientacja | Rozmiar ekranu”

to rozwiązanie pracował dla mnie ..