使用YouTubeBaseActivity,YouTubePlayerView和YouTubePlayer創建和運行示例活動非常簡單。我在定位時遇到了問題,但找不到任何文檔或示例代碼。當我在視頻播放過程中切換時,屏幕爲空白。Android YouTube api v3 - 方向
要使視頻繼續播放,onCreate(),onPause(),onSaveInstanceState()和onRestoreInstanceState()中的每一項要做哪些正確的事情?
感謝
使用YouTubeBaseActivity,YouTubePlayerView和YouTubePlayer創建和運行示例活動非常簡單。我在定位時遇到了問題,但找不到任何文檔或示例代碼。當我在視頻播放過程中切換時,屏幕爲空白。Android YouTube api v3 - 方向
要使視頻繼續播放,onCreate(),onPause(),onSaveInstanceState()和onRestoreInstanceState()中的每一項要做哪些正確的事情?
感謝
變量
@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網址解析問題」
這裏是一個示例應用程序Git項目
我還製作了示例應用程序,您可以下載
https://play.google.com/store/apps/details?id=com.thefinestartist.ytpa.sample
離開這個在這裏爲別人着想。最優秀的藝術家的回答爲我工作一樣好,但因爲我使用的是片段內的視頻播放器,並具有支持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);
}
}
我自己想到了 - 錯誤是我沒有在onCreate()中初始化YouTubePlayerView,而是在恢復過程中調用onCreate()而不是顯式創建。所有固定.. – milleph 2013-02-22 18:30:26