2013-02-21 42 views
8

Bắt đầu và chạy một hoạt động mẫu bằng YouTubeBaseActivity, YouTubePlayerView và YouTubePlayer đủ đơn giản. Tôi đang gặp rắc rối với định hướng mặc dù và không thể tìm thấy bất kỳ tài liệu hoặc mã mẫu. Khi tôi chuyển khi video đang phát màn hình trống.Android YouTube api v3 - hướng

Những điều chính xác cần làm trong mỗi onCreate(), onPause(), onSaveInstanceState() và onRestoreInstanceState() để video tiếp tục phát?

Cảm ơn

+1

Tự tìm ra - lỗi là tôi đã không khởi chạy YouTubePlayerView trong onCreate() khi onCreate() được gọi trong quá trình khôi phục chứ không phải là tạo rõ ràng. Tất cả cố định .. – milleph

Trả lời

22

Biến

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

Thực hiện 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> 

Tôi đã thực hiện hoạt động mẫu trong đó sử dụng api youtube gần đây nhất.

nguồn này xử lý "Hướng Vấn đề", "Truyền thông Tập Vấn đề", "Youtube Url Parsing Vấn đề"

  1. Đây là dự án git cho ứng dụng mẫu

    https://github.com/TheFinestArtist/YouTubePlayerActivity

  2. Tôi cũng đã tạo mẫu ứng dụng mà bạn có thể tải xuống

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

+0

Bạn đã lưu ngày của tôi .. cool – Pankaj

+0

Câu trả lời hay và thư viện tuyệt vời! – aveschini

1

Rời này ở đây cho người khác. Câu trả lời của Finest Artist của làm việc cho tôi là tốt, nhưng kể từ khi tôi đang sử dụng một máy nghe nhạc video bên trong một đoạn và phải hỗ trợ các AppCompatLibrary là tốt, đây là những gì tôi đã có thể để có được làm việc:

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); 
    } 
} 
Các vấn đề liên quan