2013-04-08 12 views
5

मेरे पास एक यूट्यूब एपीआई खंड है जो स्थिर रूप से मेरी एक्सएमएल मेनिफेस्ट फ़ाइल में जोड़ा गया है, यानी एक टुकड़ा जिसमें इसके अंदर यूट्यूब प्लेयर है।अभिविन्यास में परिवर्तन के बाद वीडियो खेलने वाले टुकड़े के टुकड़े के उदाहरण को कैसे बनाए रखें?

मेरे पास ऐसी फ़ाइल नहीं है जो मेरी परियोजना में खंड को बढ़ाती है।

मेरी गतिविधि कक्षा में मैं अपने गतिविधि वर्ग के onCreate में कोड की इस पंक्ति में कहें:

youTubePlayerFragment.setRetainInstance(true); 

यह नहीं है किसी भी प्रभावित करते हैं: जब मैं स्क्रीन बारी बारी से मैं टुकड़ा की एक खाली काली स्क्रीन मिल ।

अभिविन्यास परिवर्तन के बाद खंड को जारी रखने के लिए मैं इसे कैसे प्राप्त कर सकता हूं?

<fragment 
     android:id="@+id/youtube_fragment" 
     android:name="com.google.android.youtube.player.YouTubePlayerFragment" 
     android:layout_width="900dp" 
     android:layout_height="500dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" /> 

उत्तर

3

त्वरित और आसान समाधान है, अपने वीडियो गतिविधि के लिए निम्न जोड़ने के लिए अपने मेनिफ़ेस्ट में है:

android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 

मैं एक वीडियो के लिए इस का उपयोग करता है एक ऐप है और यह सिर्फ ठीक काम करता है। सब कुछ अभिविन्यास परिवर्तन पर ठीक से बताता है, और गतिविधि और टुकड़े का उदाहरण इसे बिना किसी खेल के निरंतर चलने की इजाजत देता है।

यदि आप टुकड़े टुकड़े को बनाए रखने के दौरान गतिविधि को तोड़ने/पुनर्निर्मित करना चाहते हैं, तो कृपया setRetainInstance() के लिए दस्तावेज़ को दोबारा पढ़ें। कुछ सूक्ष्म बारीकियां हैं जिन्हें आपको सही तरीके से काम करने के बारे में जागरूक होने की आवश्यकता है: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

2

प्रत्येक बार अभिविन्यास परिवर्तन गतिविधि को तब तक बनाए रखा जाएगा जब तक कि सभी बाल घटकों के साथ गतिविधि न हो। अब महत्वपूर्ण हिस्सा यह है कि, YouTubePlayer.Provider इसके चरणों को रखेगा (जैसे: लोड किए गए वीडियो, वर्तमान प्लेबैक स्थिति और प्लेयर कॉन्फ़िगरेशन)। निम्नलिखित पर एक नज़र डालें:

YouTubePlayer Overview

आपके मामले में, ओरिएंटेशन परिवर्तन के बाद, गतिविधि अपने बच्चे टुकड़ा (youTubePlayerFragment) के रूप में रूप में लंबे समय से निर्मित किया गया है। इसलिए आपने YouTubePlayer के इंस्टेंट और डेटा (जैसे कि वीडियोआईडी या वीडियो यूआरएल) का संदर्भ खो दिया जो वीडियो लोड करने के लिए जरूरी है, लेकिन YouTubePlayer का प्रदाता अभी भी पिछला राज्य धारण कर रहा है, जो घूर्णन के बाद शून्य हो जाता है।

समाधान: आप वास्तव में ओरिएंटेशन बदलने डिवाइस से पहले YouTubePlayer पर वीडियो खेलने के लिए आवश्यक डेटा को बचाने के लिए, और डेटा वापस पुनः प्राप्त करने के लिए जब गतिविधि से निर्मित किया गया है एक तरह से प्रबंधन करने के लिए की जरूरत है। निम्नलिखित पर एक नज़र डालें:

YouTubePlayerFragment Overview

अपने कोड संरचना के बारे में सुनिश्चित नहीं हैं, लेकिन उम्मीद है कि निम्नलिखित कोड आप कुछ विचार दे देंगे:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("currentVideoID",videoID); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    videoID = savedInstanceState.getString("currentVideoID"); 
} 

YouTubePlayer पर खेल वीडियो पाने के लिए एक नमूना

private void loadYouTubePlayer(){ 
    //load your youTubePlayerFragment here, i used YouTubePlayerSupportFragment(),may change in your case 
    //also you may not need to call getActivity(). Change the code as require 
    youTubePlayerFragment = (YouTubePlayerSupportFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.youtube_fragment); 
    youTubePlayerFragment.initialize(developerKey,new YouTubePlayer.OnInitializedListener() { 
     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 
      myYouTubePlayer = youTubePlayer; 
      myYouTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE); 
      myYouTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() { 
       @Override 
       public void onFullscreen(boolean b) { 
        isFullScreenPlaying = b; 
        Log.d(null,"Now fullScreen"); 
       } 
      }); 
      if (!b) { 
       myYouTubePlayer.loadVideo(videoID); 
      } 
     } 

     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
     Log.e(null,"Initialization Failed !!!"); 
     } 
    }); 
} 
संबंधित मुद्दे