2015-08-04 14 views
15

के रूप में काम नहीं कर रहा है मैं जानना चाहता हूं कि मेरा AVAudioRecorder पहुंच योग्य नहीं है (उदाहरण के लिए जब संगीत बजाना शुरू होता है)।आईओएस AVAudio सत्र अवरोध अधिसूचना

audioRecorderEndInterruption को आईओएस 9 के साथ बहिष्कृत किया जाएगा, मैं AVAudioSession की बाधा अधिसूचना पर ध्यान केंद्रित कर रहा हूं (लेकिन न ही उम्मीद के अनुसार काम कर रहा है)।

समस्या यह है कि यदि बाधा उत्पन्न होती है तो ऐप था और फोरग्राउंड में बाधा उत्पन्न होती है।

E.g: उपयोगकर्ता पृष्ठभूमि में एप्लिकेशन को स्थानांतरित किए बिना संगीत बजाना शुरू कर देता है और बंद कर देता है। (जिसका अर्थ है

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionWasInterrupted:) name:AVAudioSessionInterruptionNotification object:nil]; 
... 
- (void)audioSessionWasInterrupted:(NSNotification *)notification { 
    if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) { 
     NSLog(@"Interruption notification"); 

     if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) { 
      NSLog(@"InterruptionTypeBegan"); 
     } else { 
      NSLog(@"InterruptionTypeEnded"); 
     } 
    } 
} 

मैं InterruptionTypeBegan पाने की उम्मीद के रूप में, लेकिन InterruptionTypeEnded कहा जाता नहीं है, तो एप्लिकेशन को अग्रभूमि में अब भी है यह एप्लिकेशन तक कहा जाता है नहीं किया जाएगा:

किसी भी रुकावट मैं उपयोग कर रहा हूँ पता लगाने के लिए पृष्ठभूमि में और वापस अग्रभूमि में रखा गया है)।

ऐप अग्रभूमि में होने पर बाधा उत्पन्न होने पर मुझे InterruptionTypeEnded अधिसूचना कैसे प्राप्त हो सकती है?

+0

यह लिंक आपकी मदद कर सकता है: - http://stackoverflow.com/questions/23586056/audio-interruption-when-ios- appplication-is-recording-in-background –

+5

सेब प्रलेखन से: "कोई गारंटी नहीं है कि एक प्रारंभिक बाधा के अंत में व्यवधान होगा। आपके ऐप को अग्रभूमि चलने वाले राज्य या उपयोगकर्ता को प्ले बटन दबाकर स्विच करने की जानकारी होनी चाहिए। किसी भी मामले में, यह निर्धारित करें कि आपके ऐप को अपने ऑडियो सत्र को पुनः सक्रिय करना चाहिए या नहीं। " – Fennelouski

उत्तर

4

यह AV फ्रेमवर्क घटकों का उपयोग करके किसी भी ऐप को प्रभावित करने वाली एक व्यापक समस्या है (यह मूल आईओएस ऐप्स के लिए भी जाता है)। उपयोगकर्ता रुकावट खारिज

हैं ... प्रणाली, अपने कॉलबैक विधि invokes कि यह दर्शाता है:

के रूप में ऑडियो रुकावट के विषय पर 's documentation में बताया गया है, InterruptionTypeEnded वास्तव में परिदृश्य का उल्लेख में लागू किया जाना चाहिए बाधा समाप्त हो गई है।

हालांकि, यह भी कहा गया है कि InterruptionTypeEnded बिल्कुल नहीं कहा जा सकता है:

इसकी कोई गारंटी नहीं है कि एक शुरू रुकावट समाप्त रुकावट होगा।

इसलिए, परिदृश्य में एक अलग दृष्टिकोण की आवश्यकता है।


जब संगीत बाधाओं को संभालने की बात आती है, तो यह मुद्दा लंबे समय तक नहीं होगा। आईओएस 9 प्रभावशाली ऑडियो स्रोतों को प्रभावी ढंग से रोकता है जबकि ऐप के ऑडियो हैंडलर का आह्वान किया जाता है।

मीडिया बाधा के सटीक मुद्दे को संभालने का एक तरीका MPMusicPlayerController के playbackState को सुन सकता है, जैसा कि इस स्टैक ओवरफ्लो प्रश्न में दिखाया गया है: Detecting if music is playing?


रुकावट के मुद्दे को सुलझाने के लिए होगा एक और अधिक सीधा रास्ता या तो:

ब्लॉक के बाहर ऑडियो रुकावट पूरी तरह से InterruptionTypeBegan के समय में आपके ऑडियो घटक फिर से लागू द्वारा।

या यूआई संकेत देकर कि बाहरी मीडिया स्रोत ने ऑडियो सत्र में बाधा डाली है (उदाहरण के लिए एक निष्क्रिय माइक्रोफोन दिखा रहा है)।


उम्मीद है कि  समस्या का एक बेहतर समाधान के साथ ऊपर आ जाएगा, लेकिन इस बीच यह आप किसी रुकावट के मुद्दे को हल करने के लिए कुछ विकल्प देना चाहिए।

+0

धन्यवाद @ एलेक्सेंडर अज़ीज़ी! बीटीडब्ल्यू आप हस्तक्षेप के समय अपने ऑडियो घटक को फिर से आमंत्रित करके पूरी तरह से ऑडियो बाधाओं के बाहर ब्लॉक के बारे में और बता सकते हैं। ' ? – nahung89

+0

@ nahung89 एक बार 'रुकावट टाइप टाइप' कहा जाता है आप फिर से ऑडियो इंजन शुरू कर सकते हैं। किसी अन्य ऑडियो स्रोत को प्रभावी रूप से अवरुद्ध करना। –

+0

मैं देखता हूं। दरअसल मैंने पहले कोशिश की लेकिन काम नहीं किया। फोन कॉल/अलार्म/अनुस्मारक ... हमेशा ऑडियो सत्र में उच्च प्राथमिकता है। ऑडियो प्लेयर फिर से सेट करने के ठीक बाद, इसे तुरंत बंद कर दिया जाएगा। – nahung89

-1

आप पहले से ही नहीं है, तो सेट करने का प्रयास अपने AVCaptureSession की संपत्ति usesApplicationAudioSession को नहीं

This प्रश्न & उत्तर यदि आप किसी और विवरण की तलाश में हैं तो एक अच्छा संदर्भ के रूप में कार्य कर सकते हैं।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – LeftyX

+0

आपकी प्रतिक्रिया @LeftyX के लिए धन्यवाद मैंने आपकी चिंताओं पर विचार नहीं किया था और अब से मेरे उत्तरों में इसे ध्यान में रखेगा। मैं कुछ हद तक उलझन में हूं कि मेरी प्रतिक्रिया क्यों कम हो गई थी, हालांकि इसमें एक समाधान समाधान शामिल था। – ChrisHaze

+0

मैंने डाउन-वोट नहीं किया था। मैं मुश्किल से जवाब मत देना। आपके उत्तर में पूर्ण स्पष्टीकरण देना हमेशा बेहतर होता है। – LeftyX

-2

मैं इसे आज़माता हूं और कुछ ऐप में संगीत विराम के बाद इंटरफ़ेस टाइप टाइप किया जाता है, लेकिन अन्य को रोकते समय नहीं कहा जाता है।

मेरा समाधान यूआई को अपडेट करने के लिए यूआई अपडेट करता है ताकि उपयोगकर्ता को पता चल सके कि रिकॉर्ड बंद हो गया है और फाइल ऑपरेशन जैसे कुछ संबंधित काम करते हैं। जब व्यवधान समाप्त होता है, सक्रिय AVAudioSession, यदि त्रुटि नहीं है, तो एक नया रिकॉर्ड प्रारंभ करें।

यदि आप इंटरप्ट से पहले और बाद में फ़ाइल में शामिल होना चाहते हैं, तो इस प्रश्न का उत्तर: AVAudioRecorder records only the audio after interruption आपके लिए सहायक हो सकता है।

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