2015-02-17 8 views
5
m_MediaPlayer = MediaPlayer.create(context, soundFromResource); 
m_MediaPlayer.setVolume(0.99f, 0.99f); 
m_MediaPlayer.setLooping(true); 
m_MediaPlayer.setOnCompletionListener(USoundPlayback.this); 
m_MediaPlayer.start(); 

मैं इसे ऊपर की तरह परीक्षण किया है, मैं भी यह setLooping(true)start() के बाद फोन करके लेकिन कोई भाग्य के साथ परीक्षण किया है।मीडियाप्लेयर लूप नहीं करेगा। setLooping() काम नहीं करता है

मेरे पास Android 5 दोनों के साथ दो Nexus 5 फ़ोन हैं। एक पर, लूपिंग काम करता है, दूसरी तरफ ध्वनि एक बार जाने के बाद बंद हो जाता है, यह लूप नहीं होगा।

कोई विचार?

+1

पर ट्रैक आपके 'setOnCompletionListener' जैसा दिखता है? – Marcus

+1

शायद मुझे गलत तरीके से याद है लेकिन NuPlayer और AwesomePlayer व्यवहार के बीच मतभेदों पर कुछ रिपोर्टें हैं। आप डेवलपर विकल्प सेटिंग्स मेनू से कौन सा उपयोग कर सकते हैं देख सकते हैं। – harism

उत्तर

5

स्पष्ट रूप से Android 5 डिवाइसों के साथ कोई समस्या है जो AwesomePlayer के बजाय NuPlayer का उपयोग करती है।

में Media अनुभाग के तहत आप इसे देख सकते हैं Use NuPlayer (experimental) होना चाहिए। मैंने अनचेक किया है और ऐसा लगता है कि यह ठीक है।

मैं इस मुद्दे को ठीक करने का तरीका समझने में सक्षम नहीं हूं, इसलिए मैंने इसे थोड़ा सा हैक किया है। मैंने कोड में कुछ झंडे सेट किए हैं और जब यह onCompletion में प्रवेश करता है, यदि उपयोगकर्ता ने विशेष रूप से ध्वनि को रोक नहीं दिया है, तो मैं इसे पुनरारंभ करता हूं। अगर कोई बेहतर फिक्स वाला कोई है, तो मुझे बताएं और मैं यह जवाब अपडेट करूंगा। https://code.google.com/p/android-developer-preview/issues/detail?id=1695

+0

क्या यह कभी तय किया गया था? क्या आपके ऐप के लिए AwesomePlayer का उपयोग करने के लिए MediaPlayer को बताने का कोई तरीका नहीं है? मुझे एक समान समस्या है। – Flyview

+0

मैं एक रास्ता खोजने में सक्षम नहीं था, नहीं। यदि आपको लगता है, तो हमें बताएं और मैं इसके बजाय आपका जवाब स्वीकार करूंगा :( – AndreiBogdan

1

यह मीडिया प्लेयर में एक मुद्दा है:

यहाँ मुद्दा है।

मुझे लगता है कि ठीक करने के लिए अगले कोड का इस्तेमाल किया:

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        if (looping) { 
         mMediaPlayer.seekTo(0); 
        } 
       } 
      }); 
0

मैं इस इस समाधान का उपयोग कर हल:

public static void setMpLooping(final MediaPlayer mp, final boolean isLooping) { 
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP 
      || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) { 
     if (isLooping) { 
      mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        mp.start(); 
       } 
      }); 
     } else { 
      mp.setOnCompletionListener(null); 
     } 
    } else { 
     mp.setLooping(isLooping); 
    } 
} 

लेकिन याद रखें, कभी कभी अंत के शुरू करने के लिए से संक्रमण के दौरान विलंब हुआ है लॉलीपॉप

संबंधित मुद्दे