2013-07-08 8 views
6

जब applicationDidEnterBackground: चलाता है, मैं ऑडियो जो AVAudioPlayer का उपयोग कर खेल रहा है थामने:रोका गया ऑडियो applicationWillEnterForeground पर स्वचालित रूप से चलना प्रारंभ हो जाता:

[self.avPlayer pause]; 

अब, जब applicationWillEnterForeground: चलाता, ऑडियो स्वचालित रूप से खेलने के लिए शुरू होता है! चूंकि मैंने ऑडियो शुरू नहीं किया है, इसलिए उपयोगकर्ता इंटरफ़ेस अपडेट नहीं किया गया है और यह दिखाता है कि ऑडियो अभी भी रुका हुआ स्थिति में है।

क्या चल रहा है? यह आईपैड 6.x में आईपैड 6.x में हो रहा है। यह समस्या आईओएस 5.x चलाने वाले पुराने आईपैड पर पुन: उत्पन्न नहीं हो रही है।

इस तरह मैं सेटअप AVAudioSession:

// Setup the audio session 
BOOL succeeded = NO; 
NSError *sessionError = nil; 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setDelegate:self]; 

if ([session respondsToSelector:@selector(setPreferredSampleRate:error:)]) { 
    succeeded = [session setPreferredSampleRate:128000.0f error:&sessionError]; 

} else { 
    succeeded = [session setPreferredHardwareSampleRate:128000.0f error:&sessionError]; 
} 

succeeded = [session setCategory:AVAudioSessionCategorySoloAmbient error:&sessionError]; 
succeeded = [session setActive:YES error:&sessionError]; 
+0

आप [self.avPlayer विराम] क्यों नहीं करेंगे; फिर आवेदन में WillEnterForeground:? – soryngod

+0

जहां आप इस कोड का उपयोग कर रहे हैं? –

+0

यह एक बुरा हिट-एन-ट्रायल समाधान है (मेरी राय में)। ऐसा कहकर, :) मैं वास्तव में कोशिश कर रहा था और यह काम नहीं कर रहा है! मुझे नहीं पता कि यहां किस तरह का जादूगर खेल रहा है। – Mustafa

उत्तर

1

मेरी हाल ही में एप्लिकेशन में से एक में, मैं एक ऐसी ही समस्या का समाधान ऑडियो प्लेबैक स्वचालित रूप से रुक जाता है और बाद में आप एक कॉल से बाधित कर रहे हैं शुरू और जीयूआई ताज़ा नहीं है पाया मेरे ऐप में मैं निम्नलिखित विधि का उपयोग कर समस्या का समाधान हो गया है:

वर्ग जहां खिलाड़ी कोड संभाल

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

और AVAudioSession के audioPlayerEndInterruption प्रतिनिधि विधि का उपयोग नियंत्रण पाने के लिए के बाद आवेदन फिर से शुरू किया गया था में इस रजिस्टर। इस फ़ंक्शन में आप प्लेबैक फिर से शुरू कर सकते हैं और तदनुसार यूआई अपडेट कर सकते हैं।

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags 

उम्मीद है कि इससे मदद मिलती है।

0

एचआरएम का समाधान मेरे लिए काम नहीं करता था। फिर से शुरू होने से बचने के लिए इसे प्राप्त करने का एकमात्र तरीका स्टॉप का उपयोग करना है: [self.avPlayer stop]

1

मुझे कुछ अजीब यूएक्स मिला और पृष्ठभूमि से पीछे और आगे जाने के बाद और पोस्ट के समूह पर आधारित, हैंडल की थोड़ी सी चिल्लाहट के लिए डी योजना।

func applicationWillEnterForeground(application: UIApplication) { 
     if AVAudioSession.sharedInstance().otherAudioPlaying{     
NSNotificationCenter.defaultCenter().postNotificationName(Notifications.ForegroundEnteredWithOtherAudioPlaying, object: nil) 
     } 
    } 

यदि हां, तो आप खिलाड़ी को रोक सकते हैं जब कि सूचना प्राप्त होने पर: जाँच करता है, तो अन्य संगीत जब एप्लिकेशन को अग्रभूमि में प्रवेश करती है खेल रहा है - मैं काफी सरल कुछ किया। आपने उल्लेख किया है कि काम नहीं किया है, लेकिन आपके बाकी कोड को देखे बिना, यह जानना मुश्किल है कि क्यों।

एक अन्य बात मैं करना पड़ा खिलाड़ी आइटम से status ध्वज को पर्यवेक्षक दूर करने के लिए, क्योंकि मुझे लगता है कि ReadyToPlay मूल्य जहाँ मैं AvPlayer बता वास्तव में खेलने के लिए के लिए सुनने के लिए है। ऐप फोरग्राउंड में प्रवेश करते समय निकाल दिया जाता है और एक सक्रिय ऑडियो सत्र होता है। तो उस पर्यवेक्षक को रोकें और इसे हर बार खेलने पर सेट करके, (जो पागल नहीं है क्योंकि मैं तर्क दूंगा कि यह कहना ठीक है कि मैं केवल हिट करने के बाद निरीक्षण करना चाहता हूं), मैं नियंत्रित करने में सक्षम हूं बहुत अजीबता।

मैंने परीक्षण मामलों का एक समूह भी लिखा है जो मैं यह सुनिश्चित करने के लिए यहां साझा करूंगा कि आपका अनुभव बहुत अच्छा आकार में है। यह व्यापक नहीं है लेकिन यह भी काफी गहन है।

// 1. Play, leave app, don't open anything else, come back 
    // 2. Play, leave app, open an app that plays music, come back 
    // 3. Play, leave app, open an app that plays music, play music, come back 
    // 4. Play, let audio go for 5 seconds, pause, open an app that plays music, come back 
    // 5. Play, let audio go for 5 seconds, pause, open an app that plays music, play music, come back 
    // 6. Press play, leave app before playback starts, open an app that plays music, come back 
    // 7. Crazy s$*t like play, leave app, open an app that plays music, play music, come back, tap a different song 
0

मुझे भी एक ही समस्या का सामना करना पड़ रहा था। इसलिए मैंने UIApplicationWillResignActive के लिए अपनी कक्षा पंजीकृत की और मुझे सूचना प्राप्त होने पर ऑडियो रोक दिया गया।

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