2013-03-28 12 views
11

私はYouTubeのビデオから全画面を離れる方法を全部読んでいますが、私はActivityのように動作していませんが、 dが好きです。Android:YouTubeのフルスクリーンを見るときに戻るとアクティビティの終了

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

とレイアウト:

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

任意のアイデア

は、私はあなたのコードを投稿しますか?あまりにも奇妙なことをしないようにしました.YouTubeのAPIの例からコピー/貼り付けするだけです。

+0

それはあなたが戻って押すと、onStopまたはonDestoryが呼び出されたことを正しい行動のように見え、活動が破壊されます。 http://developer.android.com/training/basics/activity-lifecycle/stopping.html – YankeeWhiskey

答えて

25

それは、だった - プレイヤーはフラグメントの中にあったので、私は戻るボタンをキャッチしました:

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

と同様に私の「のfullScreen」ブール値を設定しますこれは

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

ありがとうございました!

+1

onBackPressedメソッドではどのようにvideoPlayerにアクセスしますか?私は同じ試しましたが、これを取得しています:ヌルオブジェクト参照でインターフェイスメソッド 'void com.google.android.youtube.player.YouTubePlayer.setFullscreen(boolean)'を呼び出そうとしました – saintjab

+0

videoplayerオブジェクトをonInitializationSuccessメソッド内のフィールド変数に入れます –

0

戻るボタンを押して、それが何をしているのかをカスタム設定することができます。正しい動作は、前にも言ったよう

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

ステップ1:フォローステップ2

Nhanoで16回答:あなたのMenifest YoutubeActivityタグで線の下に追加します。

アンドロイド:= configChanges |

このソリューションは、私のために働いていた「オリエンテーション画面サイズ」..

関連する問題