2013-09-05 18 views
37

में माइक्रोफ़ोन इनपुट अनुमति से इनकार करने का तरीका कैसे पता लगाया जाए जब उपयोगकर्ता ने मेरे आईओएस एप्लिकेशन पर माइक्रोफ़ोन अनुमति को अस्वीकार कर दिया था। जब मैं माइक्रोफ़ोन रिकॉर्ड करने का प्रयास करता हूं तो मुझे केवल यह मान मिलता है: -120.000000 डीबीआईओएस 7

लेकिन इससे पहले कि मुझे एक AVAudioSession स्थापित करना होगा। क्या कोई और काम है?

और मैं उत्पादन में यह संदेश मिल गया: Microphone input permission refused - will record only silence

धन्यवाद।

उत्तर

1

अगर मुझे ऐप्पल के devforums, but I found the answer you're looking for there के बाहर आईओएस 7 के बारे में बात करने की अनुमति है तो मैं 100% निश्चित नहीं हूं।

संक्षेप में, आपको एसडीके में AVAudioSession.h शीर्षलेख फ़ाइल में अपना समाधान मिल जाएगा। और यदि आप अभी भी आईओएस 6 का समर्थन करते समय इसका उपयोग करना चाहते हैं, तो एपीआई उपलब्धता की जांच के लिए "respondsToSelector:" का उपयोग करना सुनिश्चित करें।

42

कृपया ध्यान दें कि यह कार्य तभी Xcode 5 के साथ बनाया गया काम करेंगे, और नहीं 4.6

साथ अपनी परियोजना के लिए AVFoundation के फ्रेमवर्क जोड़े

फिर AVAudioSession हेडर फाइल आयात करते हैं, AVFoundation के ढांचे, तुम कहाँ से जाँच करने का इरादा है, तो माइक्रोफोन सेटिंग सक्षम है

#import <AVFoundation/AVAudioSession.h> 

तो बस इस विधि

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
      if (granted) { 
       // Microphone enabled code 
      } 
      else { 
       // Microphone disabled code 
      } 
     }]; 
फोन

पहली बार यह विधि चलती है, यह माइक्रोफ़ोन पहुंच की अनुमति देने के लिए संकेत दिखाएगी और उपयोगकर्ताओं की प्रतिक्रिया के आधार पर यह समापन ब्लॉक निष्पादित करेगा। दूसरी बार से यह डिवाइस पर संग्रहीत सेटिंग के आधार पर कार्य करेगा।

+1

ध्यान दें कि यह विधि iOS7 और इसके बाद के संस्करण पर ही उपलब्ध है। https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference।एचटीएमएल # // apple_ref/occ/instm/AVAudioSession/requestRecordPermission: –

51

यदि आप अभी भी आईओएस एसडीके 6.0 (जैसा कि मैं हूं) के साथ संकलित कर रहे हैं तो आपको अनुरोध के रूप में @Luis E. Prado से थोड़ा अधिक अप्रत्यक्ष होना होगा, अनुरोध के रूप में रिकार्डप्रमिशन विधि मौजूद नहीं है।

यहां मैंने यह कैसे किया। अगर आप एआरसी का उपयोग कर रहे हैं तो ऑटोरेलीज बिट को हटा दें। आईओएस 6 पर कुछ नहीं होता है, और आईओएस 7 पर या तो 'माइक्रोफोन सक्षम है' संदेश लॉग होता है या अलर्ट पॉप अप हो जाता है।

AVAudioSession *session = [AVAudioSession sharedInstance]; 
if ([session respondsToSelector:@selector(requestRecordPermission:)]) { 
    [session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) { 
     if (granted) { 
      // Microphone enabled code 
      NSLog(@"Microphone is enabled.."); 
     } 
     else { 
      // Microphone disabled code 
      NSLog(@"Microphone is disabled.."); 

      // We're in a background thread here, so jump to main thread to do UI work. 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [[[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied" 
             message:@"This app requires access to your device's Microphone.\n\nPlease enable Microphone access for this app in Settings/Privacy/Microphone" 
             delegate:nil 
           cancelButtonTitle:@"Dismiss" 
           otherButtonTitles:nil] autorelease] show]; 
      }); 
     } 
    }]; 
} 

संपादित: ऐसा लगता है कि withObject ब्लॉक एक पृष्ठभूमि सूत्र में निष्पादित किया जाता है, इसलिए वहाँ किसी भी यूआई काम नहीं करते हैं, या आपके एप्लिकेशन लटका कर सकते हैं। मैंने ऊपर दिए गए कोड को समायोजित किया है। एक ग्राहक ने बीटा रिलीज के शुक्रिया के बारे में बताया। गलती के लिए माफी

+0

मुझे आईपैड एयर (केवल) पर इस समाधान के साथ कोई समस्या है। क्या आपको पता है कि इस तरह के डिवाइस के साथ कुछ अतिरिक्त विन्यास मौजूद है? – Beto

+0

@BetoBens मैंने उस मॉडल के लिए विशिष्ट कुछ भी नहीं सुना है। समस्या क्या है? –

+0

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

1

स्विफ्ट जवाब:

if AVAudioSession.sharedInstance().recordPermission() == .Denied { 
    print("Microphone permission refused"); 
} 

या आप PermissionScope तरह ढांचा है जो आसानी से अनुमतियों की जाँच करने की अनुमति का उपयोग कर सकते हैं। https://github.com/nickoneill/PermissionScope

संपादित करें: स्विफ्ट 3 जवाब:

import AVFoundation 
... 
if AVAudioSession.sharedInstance().recordPermission() == .denied { 
    print("Microphone permission refused"); 
}