2013-02-21 17 views
8

Utworzenie przykładowej aktywności za pomocą YouTubeBaseActivity, YouTubePlayerView i YouTubePlayer było dość proste. Mam problem z orientacją i nie mogę znaleźć żadnej dokumentacji ani przykładowego kodu. Kiedy przełączam się podczas odtwarzania wideo, ekran jest pusty.Aplikacja YouTube dla systemu Android api v3 - orientacja

Jakie są właściwe czynności w każdym z metod onCreate(), onPause(), onSaveInstanceState() i onRestoreInstanceState(), aby kontynuować odtwarzanie wideo?

Dzięki

+1

Sam to sobie wyobraziłem - błędem było to, że nie zainicjowałem YouTubePlayerView w onCreate(), gdy onCreate() został wywołany podczas przywracania, a nie jawnego tworzenia. Wszystko naprawione ... – milleph

Odpowiedz

22

Zmienne

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

osprzętem 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> 

Zrobiłem aktywność próbkowania, który wykorzystuje najnowsze youtube api.

Ten uchwyt źródło "Orientacja Problem", "Mediów Volume Problem", "Youtube Url analizowaniem Problem"

  1. Oto projekt git dla przykładowej aplikacji

    https://github.com/TheFinestArtist/YouTubePlayerActivity

  2. Wykonałem również przykładową aplikację, którą można pobrać

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

+0

Uratowałeś mój dzień .. fajne – Pankaj

+0

Świetna odpowiedź i wspaniała biblioteka! – aveschini

1

Pozostawiając to tutaj dla innych. Odpowiedź najlepszych Artysta pracował dla mnie, jak również, ale ponieważ używam odtwarzacza wideo wewnątrz fragmentu i muszą wspierać AppCompatLibrary jak dobrze, oto co udało mi się dostać pracy:

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); 
    } 
} 
Powiązane problemy