2013-02-21 62 views
8

使用YouTubeBaseActivity,YouTubePlayerView和YouTubePlayer創建和運行示例活動非常簡單。我在定位時遇到了問題,但找不到任何文檔或示例代碼。當我在視頻播放過程中切換時,屏幕爲空白。Android YouTube api v3 - 方向

要使視頻繼續播放,onCreate(),onPause(),onSaveInstanceState()和onRestoreInstanceState()中的每一項要做哪些正確的事情?

感謝

+1

我自己想到了 - 錯誤是我沒有在onCreate()中初始化YouTubePlayerView,而是在恢復過程中調用onCreate()而不是顯式創建。所有固定.. – milleph 2013-02-22 18:30:26

回答

22

變量

@SuppressLint("InlinedApi") 
private static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9 
     ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 
     : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; 

@SuppressLint("InlinedApi") 
private static final int LANDSCAPE_ORIENTATION = Build.VERSION.SDK_INT < 9 
     ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 
     : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; 

private YouTubePlayer mPlayer = null; 
private boolean mAutoRotation = false; 

的OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mAutoRotation = Settings.System.getInt(getContentResolver(), 
      Settings.System.ACCELEROMETER_ROTATION, 0) == 1; 
} 

實施OnInitializedListener

@Override 
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, 
     boolean wasRestored) { 
    mPlayer = player; 
    player.setOnFullscreenListener(this); 

    if (mAutoRotation) { 
     player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION 
       | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI 
       | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE 
       | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT); 
    } else { 
     player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION 
       | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI 
       | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT); 
    } 
} 

Inplement onConfigurationChanged

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     if (mPlayer != null) 
      mPlayer.setFullscreen(true); 
    } 
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     if (mPlayer != null) 
      mPlayer.setFullscreen(false); 
    } 
} 

@Override 
public void onFullscreen(boolean fullsize) { 
    if (fullsize) { 
     setRequestedOrientation(LANDSCAPE_ORIENTATION); 
    } else { 
     setRequestedOrientation(PORTRAIT_ORIENTATION); 
    } 
} 

Menifest

<activity 
    android:name="com.sample.android.YouTubePlayerActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:screenOrientation="sensor" 
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
</activity> 

我做它採用最新的YouTube API樣的活動。

此源手柄 「定位問題」, 「介質體積問題」, 「YouTube網址解析問題

  1. 這裏是一個示例應用程序Git項目

    https://github.com/TheFinestArtist/YouTubePlayerActivity

  2. 我還製作了示例應用程序,您可以下載

    https://play.google.com/store/apps/details?id=com.thefinestartist.ytpa.sample

+0

你節省了我的一天..酷 – Pankaj 2015-05-29 04:54:54

+0

偉大的答案和偉大的圖書館! – aveschini 2016-01-29 15:16:11

1

離開這個在這裏爲別人着想。最優秀的藝術家的回答爲我工作一樣好,但因爲我使用的是片段內的視頻播放器,並具有支持AppCompatLibrary爲好,這是我能得到工作:

YouTubePlayerActivityFragment.java

public class YouTubePlayerActivityFragment extends YouTubePlayerSupportFragment implements 
    YouTubePlayer.OnFullscreenListener { 

@SuppressLint("InlinedApi") 
private static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9 
     ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 
     : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; 

@SuppressLint("InlinedApi") 
private static final int LANDSCAPE_ORIENTATION = Build.VERSION.SDK_INT < 9 
     ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 
     : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; 

private YouTubePlayer.OnFullscreenListener fullScreenListener = null; 
private YouTubePlayer yPlayer = null; 
private boolean mAutoRotation = false; 


public static YouTubePlayerActivityFragment newInstance(String videoID, String apiKey) { 
    YouTubePlayerActivityFragment fragment = new YouTubePlayerActivityFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("video_id", videoID); 
    bundle.putString("api_key", apiKey); 
    fragment.setArguments(bundle); 
    fragment.init(); 
    return fragment; 
} 

public YouTubePlayerActivityFragment() { 

} 

@Override 
public void onCreate(Bundle var1) { 
    super.onCreate(var1); 
    mAutoRotation = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1; 
    fullScreenListener = this; 
} 

private void init() { 
    initialize(getArguments().getString("api_key"), new YouTubePlayer.OnInitializedListener() { 
     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) { 
      yPlayer = youTubePlayer; 
      youTubePlayer.setOnFullscreenListener(fullScreenListener); 
      if (mAutoRotation) { 
       youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION 
         | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI 
         | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE 
         | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT); 
      } else { 
       youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION 
         | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI 
         | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT); 
      } 

      if (!wasRestored) { 
       yPlayer.loadVideo(getArguments().getString("video_id")); 
      } 
     } 

     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 

     } 
    }); 
} 

@Override 
public void onFullscreen(boolean isFullSize) { 
    if (isFullSize) { 
     getActivity().setRequestedOrientation(LANDSCAPE_ORIENTATION); 
    } else { 
     getActivity().setRequestedOrientation(PORTRAIT_ORIENTATION); 
    } 
}