2013-09-20 6 views
8

मेरे पास संगीत प्लेयर के साथ आईओएस 7 एप्लीकेशन है। मैं UI को अद्यतन करने के लिए MPMusicPlayerController से प्लेबैक स्थिति परिवर्तनों को देखने के लिए निम्न कोड का उपयोग कर रहा हूं। अधिक सटीक रूप से मैं प्ले और पॉज़ के बीच प्ले बटन के रूप को टॉगल करता हूं।आईओएस 7 एमपीएम्यूजिकप्लेयर कंट्रोलर गलत कहता है

-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1 
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2 
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1 
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2 

playbackState 2 का मतलब MPMusicPlaybackStatePaused और प्रदर्शित करने के लिए अपने आवेदन का कारण बनता है:

[[NSNotificationCenter defaultCenter] addObserver: self 
        selector: @selector (handle_NowPlayingItemChanged:) 
         name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification 
        object: self.musicPlayer]; 

[[NSNotificationCenter defaultCenter] addObserver: self 
        selector: @selector (handle_PlaybackStateChanged:) 
         name: MPMusicPlayerControllerPlaybackStateDidChangeNotification 
        object: self.musicPlayer]; 

[self.musicPlayer beginGeneratingPlaybackNotifications]; 

अगर मैं एक iPad या iPhone पर iOS7 पर अनुप्रयोग चलाने, मैं सिर्फ एक ही कॉलबैक के बजाय निम्नलिखित अनुक्रम मिल यूआई में गलत स्थिति, जबकि गीत वास्तव में वापस खेला जा रहा है। यह समझ में नहीं आता है कि वैकल्पिक मूल्यों के साथ कॉलबैक को 4 बार कहा जाता है।

ऐसा होता है जब केवल कतार बदलते हैं। ऐसा लगता है कि सिस्टम कतार को ठीक से साफ़ नहीं कर रहा है।

इसे हल करने के तरीके पर कोई विचार?

उत्तर

4

मुझे आईओएस 7 के रिलीज के बाद से एक ही समस्या का सामना करना पड़ रहा है। यह आईओएस के साथ एक समस्या है; न केवल यह एक गलत प्लेबैक राज्य लेकिन यह भी अवसरों पर रिपोर्ट कर रहा है मैं एप्पल के लिए बग की रिपोर्ट की है और मैं तुम्हें एक ही बात करते हैं सुझाव है कि प्लेबैक स्थिति परिवर्तन सूचनाएं (MPMusicPlayerControllerPlaybackStateDidChangeNotification)

प्राप्त करने के लिए विफल रहता है (Apple Bug Reporter)

+0

हां, मैंने ऐप्पल को एक बग भेजा है लेकिन मुझे हल करने के लिए एक कामकाज की आवश्यकता है ... – swifferina

+1

@ user1763004 इसके लिए कोई काम नहीं है। यदि आपको कभी-कभी गलत प्लेबैक स्थिति दी जा रही है, तो यह निर्धारित करने का कोई तरीका नहीं है कि यह किसी भी समय के लिए सही है या गलत है। मुझे लगता है कि एकमात्र अन्य विकल्प एक प्ले और पॉज़ बटन दोनों होगा, लेकिन मुझे लगता है कि यह कुछ नहीं है जो आप चाहते हैं। – sooper

+0

मेरे पास यह समस्या एक संगीत प्लेयर पर भी है।अब तक छुटकारा पाने का कोई तरीका नहीं है। आईओएस 7 पर यह एक गंभीर मुद्दा है। – loretoparisi

4

मुझे भी यही समस्या थी। मैं ऑडियो चला रहा है, तो जाँच करने के लिए उपयोग playbackState के बजाय इस समाधान पाया, मैं इस हालत में इस्तेमाल किया:

if([[MPMusicPlayerController iPodMusicPlayer] currentPlaybackRate] == 0) 
3

एक और वैकल्पिक हल जांच है कॉलबैक मैंने जो किया वह निम्नानुसार है:

(1) कतार परिवर्तन के दौरान कॉलबैक को दबाएं। इस प्रकार, मेरे पास एक BOOL ivar doNotNoteNowPlayingItem है। इस प्रकार

if (self.doNotNoteNowPlayingItem) // flag to prevent 
     return; 

, जब मैं कतार बदलने के बारे में हूँ, मैं झंडा उठाना, यस को यह इवर की स्थापना, और इसे फिर से कम जब मैं और के बारे में nowPlayingItem सेट करने के लिए कर रहा हूँ: एक उदाहरण कॉलबैक इस तरह शुरू होता है कॉलबैक के लिए फिर से तैयार हूँ। अन्य कॉलबैक समान रूप से काम करेंगे।

(2)playbackState का उपयोग इस परीक्षण के रूप में नहीं करें कि हम बनाम बना रहे हैं या नहीं। अगर हम रुक गए हैं तो जवाब सही होगा, लेकिन अगर हम खेल रहे हैं, तो जवाब को रोका जा सकता है। रोके जाने से खेलने में अंतर करने के लिए, currentPlaybackRate देखें; यदि यह 1 के करीब है तो हम खेल रहे हैं, लेकिन अगर यह 0 के करीब है तो हम रुक गए हैं।

+1

मुझे लगता है कि 'वर्तमान प्लेबैकरेट' की जांच करने से मुझे जो समस्या हो रही है, उसे हल करता है। हालांकि, आपको समानता का उपयोग करके कभी भी फ्लोट की तुलना नहीं करनी चाहिए! – matt

1

वैकल्पिक हल के अपने कार्यान्वयन पर निर्भर करता है:

if([[AVAudioSession sharedInstance] isOtherAudioPlaying])

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