Microphone Permission एक सिस्टम अनुमति है जो किसी एप्लिकेशन को डिवाइस के माइक्रोफ़ोन तक पहुंचने के लिए आवश्यक है। यह ऑडियो रिकॉर्डिंग, वॉइस मैसेज, वीडियो कॉल और स्पीच रिकॉग्निशन के लिए आवश्यक है। Apple Developer Documentation, 2024 के अनुसार, ऑडियो कैप्चर का उपयोग करने वाले सभी एप्लिकेशन सिस्टम डायलॉग के माध्यम से उपयोगकर्ता की स्पष्ट सहमति लेने के लिए बाध्य हैं।
मुख्य बातें
Microphone Permission एक गोपनीयता सुरक्षा तंत्र है जो डिवाइस के माइक्रोफ़ोन से अनधिकृत ऑडियो रिकॉर्डिंग को रोकता है। मोबाइल प्लेटफ़ॉर्म माइक्रोफ़ोन को सबसे संवेदनशील संसाधनों में से एक मानते हैं, क्योंकि ऑडियो रिकॉर्डिंग व्यक्तिगत बातचीत, आसपास के वातावरण और गोपनीय जानकारी को कैप्चर कर सकती है।
Android RECORD_AUDIO को एक खतरनाक अनुमति के रूप में वर्गीकृत करता है, और iOS को Info.plist में NSMicrophoneUsageDescription कुंजी के अनिवार्य जोड़ की आवश्यकता होती है। दोनों प्लेटफ़ॉर्म पर, अनुरोध रनटाइम पर किया जाता है, और उपयोगकर्ता सिस्टम सेटिंग्स के माध्यम से किसी भी समय अनुमति रद्द कर सकता है। सिस्टम रिकॉर्डिंग संकेतक (iOS पर नारंगी बिंदु, Android 12+ पर हरा संकेतक) उपयोगकर्ता को संकेत देता है कि एप्लिकेशन उस समय माइक्रोफ़ोन का उपयोग कर रहा है।
Pew Research Center (2024) के एक अध्ययन के अनुसार, 54% मोबाइल डिवाइस उपयोगकर्ताओं ने कम से कम एक बार किसी एप्लिकेशन को माइक्रोफ़ोन एक्सेस से इनकार किया है। मुख्य कारण यह समझ नहीं पाना है कि ऐप को ऑडियो रिकॉर्डिंग की आवश्यकता क्यों है। इसलिए, डेवलपर को माइक्रोफ़ोन उपयोग के उद्देश्य को यथासंभव पारदर्शी रूप से समझाना चाहिए।
Android पर माइक्रोफ़ोन अनुमति मेनिफेस्ट में RECORD_AUDIO घोषित करके और एप्लिकेशन कोड में रनटाइम अनुरोध करके प्राप्त की जाती है। Android 10 से शुरू होकर, माइक्रोफ़ोन तक पहुंच अतिरिक्त रूप से बैकग्राउंड एप्लिकेशन के लिए प्रतिबंधों द्वारा नियंत्रित होती है।
पहला कदम मेनिफेस्ट फ़ाइल में RECORD_AUDIO अनुमति घोषित करना है। इस घोषणा के बिना, रनटाइम अनुरोध का कोई प्रभाव नहीं होगा, और एप्लिकेशन माइक्रोफ़ोन तक नहीं पहुंच पाएगा।
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT एक सिस्टम अनुमति है जो तृतीय-पक्ष एप्लिकेशन के लिए उपलब्ध नहीं है। इसका उपयोग केवल सिस्टम एप्लिकेशन द्वारा ऑडियो आउटपुट कैप्चर करने के लिए किया जाता है। सामान्य एप्लिकेशन को केवल RECORD_AUDIO की आवश्यकता होती है।
मेनिफेस्ट में घोषणा के बाद, रनटाइम अनुरोध करना आवश्यक है। माइक्रोफ़ोन से ऑडियो रिकॉर्ड करने के लिए AudioRecord का उपयोग करते हुए एक उदाहरण देखें।
private val recordAudioPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
startRecording()
} else {
showMicrophoneExplanation()
}
}
fun startRecording() {
val sampleRate = 44100
val bufferSize = AudioRecord.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT)
val recorder = AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize)
recorder.startRecording()
// बफ़र में ऑडियो डेटा रिकॉर्ड करना
}
ऑडियो रिकॉर्डिंग जीवनचक्र को सही ढंग से संभालना महत्वपूर्ण है। जब एप्लिकेशन Android 9 और उससे ऊपर बैकग्राउंड में जाता है, तो माइक्रोफ़ोन रिकॉर्डिंग सिस्टम द्वारा रोकी जा सकती है। Android 10 से शुरू होकर, बैकग्राउंड माइक्रोफ़ोन एक्सेस अतिरिक्त रूप से प्रतिबंधित है: बैकग्राउंड में ऐप रिकॉर्डिंग शुरू नहीं कर सकता, और सक्रिय रिकॉर्डिंग रोक दी जाती है। बैकग्राउंड रिकॉर्डिंग के लिए MediaProjection या नोटिफिकेशन के साथ Service की आवश्यकता होती है।
iOS पर माइक्रोफ़ोन अनुमति Info.plist में NSMicrophoneUsageDescription कुंजी और AVAudioSession.requestRecordPermission विधि के कॉल के माध्यम से कॉन्फ़िगर की जाती है। Apple को अनुरोध संवाद में माइक्रोफ़ोन उपयोग के कारण की अनिवार्य व्याख्या की आवश्यकता होती है।
NSMicrophoneUsageDescription कुंजी किसी भी एप्लिकेशन के लिए अनिवार्य है जो माइक्रोफ़ोन एक्सेस का अनुरोध करता है। इसके बिना, ऑडियो रिकॉर्ड करने का प्रयास करने पर एप्लिकेशन क्रैश हो जाएगा।
<key>NSMicrophoneUsageDescription</key>
<string>ऐप को वॉइस नोट्स रिकॉर्ड करने और ऑडियो संदेश भेजने के लिए माइक्रोफ़ोन एक्सेस की आवश्यकता है।</string>
iOS पर माइक्रोफ़ोन एक्सेस का अनुरोध AVAudioSession के माध्यम से किया जाता है। प्रतिक्रिया प्राप्त करने के बाद, एप्लिकेशन ऑडियो सत्र कॉन्फ़िगर करता है और रिकॉर्डिंग शुरू करता है।
import AVFAudio
func requestMicrophoneAccess() {
AVAudioSession.sharedInstance().requestRecordPermission { granted in
DispatchQueue.main.async {
if granted {
self.configureAudioSession()
self.startAudioRecording()
} else {
self.redirectToSettings()
}
}
}
}
private func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(.playAndRecord, mode: .default)
try session.setActive(true)
} catch {
print("Audio session error: \(error)")
}
}
iOS 14 और उससे ऊपर, माइक्रोफ़ोन का उपयोग करने वाला एप्लिकेशन स्टेटस बार में एक नारंगी संकेतक प्रदर्शित करता है। उपयोगकर्ता देख सकता है कि कौन सा एप्लिकेशन वर्तमान में ऑडियो रिकॉर्ड कर रहा है। यदि एप्लिकेशन बिना किसी वैध कारण के बैकग्राउंड में माइक्रोफ़ोन का उपयोग करता है, तो Apple अपडेट को अस्वीकार कर सकता है। AVAudioSession आपको ऑडियो सत्र की श्रेणी और मोड कॉन्फ़िगर करने की अनुमति देता है, जो बैकग्राउंड में संक्रमण करते समय एप्लिकेशन के व्यवहार को निर्धारित करता है।
माइक्रोफ़ोन उपयोग परिदृश्य मोबाइल एप्लिकेशन में विविध हैं: सरल वॉइस रिकॉर्डिंग से लेकर रीयल-टाइम में जटिल ऑडियो स्ट्रीम प्रोसेसिंग तक।
मैसेंजर और नोट लेने वाले ऐप वॉइस संदेश रिकॉर्ड करने के लिए माइक्रोफ़ोन का उपयोग करते हैं। इस मामले में, Microphone Permission रिकॉर्ड बटन दबाने पर अनुरोधित किया जाता है। रिकॉर्डिंग पूरी होने के बाद, ऑडियो सत्र को रोकना महत्वपूर्ण है ताकि अन्य एप्लिकेशन माइक्रोफ़ोन का उपयोग कर सकें। iOS पर AVAudioSession और Android पर AudioManager ऑडियो फ़ोकस प्रबंधित करते हैं।
वॉइस इनपुट वाले एप्लिकेशन (खोज, डिक्टेशन, वॉइस असिस्टेंट) स्पीच रिकॉग्निशन API के साथ माइक्रोफ़ोन का उपयोग करते हैं। Android पर, यह android.speech से SpeechRecognizer है, iOS पर — Speech फ्रेमवर्क से SFSpeechRecognizer। स्पीच रिकॉग्निशन के लिए रिकॉग्निशन सेवाओं (Android पर SPEECH, iOS पर SFSpeechRecognizer.requestAuthorization) के लिए अतिरिक्त अनुमति की आवश्यकता हो सकती है।
वीडियो कॉलिंग एप्लिकेशन (WebRTC, Zoom, Telegram) Camera Permission के साथ Microphone Permission का अनुरोध करते हैं। इस संदर्भ में, दोनों अनुमतियों को एक साथ नहीं बल्कि क्रमिक रूप से अनुरोध करना महत्वपूर्ण है, ताकि उपयोगकर्ता संवादों से अभिभूत न हो। WebRTC ऑडियो और वीडियो कैप्चर के लिए getUserMedia का उपयोग करता है, लेकिन मोबाइल प्लेटफ़ॉर्म पर पहले सिस्टम अनुमतियों की आवश्यकता होती है।
गुणवत्तापूर्ण रिकॉर्डिंग के लिए, ऑडियो सत्र मापदंडों को सही ढंग से कॉन्फ़िगर करना आवश्यक है। iOS पर, .playAndRecord श्रेणी एक साथ ध्वनि चलाने और रिकॉर्ड करने की अनुमति देती है। Android पर, AudioSource.MIC चुनना मुख्य माइक्रोफ़ोन से कैप्चर प्रदान करता है, जबकि AudioSource.VOICE_COMMUNICATION वॉइस संचार के लिए रिकॉर्डिंग को अनुकूलित करता है। इसके अतिरिक्त, मानक CD गुणवत्ता के लिए 44100 Hz की नमूना दर और PCM 16 बिट प्रारूप सेट किया जा सकता है।
ऑडियो रिकॉर्डिंग के दौरान, सिस्टम व्यवधान हो सकते हैं: इनकमिंग कॉल, अलार्म सक्रियण, किसी अन्य एप्लिकेशन से सूचना। iOS पर, AVAudioSessionDelegate beginInterruption और endInterruption को संभालता है। Android पर, AudioManager.OnAudioFocusChangeListener एप्लिकेशन को ऑडियो फ़ोकस के नुकसान या वापसी के बारे में सूचित करता है। उचित व्यवधान प्रबंधन अप्रत्याशित घटनाओं के दौरान रिकॉर्डिंग को सहेजने और डेटा हानि से बचने की अनुमति देता है। फ़ोकस खोने पर रिकॉर्डिंग को रोकने और उपयोगकर्ता सूचना के साथ वापसी के बाद इसे फिर से शुरू करने की अनुशंसा की जाती है।
ऑडियो कैप्चर ऑप्टिमाइज़ेशन में नमूना दर, बफ़र आकार और एन्कोडिंग प्रारूप का कॉन्फ़िगरेशन शामिल है। वॉइस संदेशों के लिए, 44100 Hz की आवृत्ति और मोनो चैनल पर्याप्त हैं। स्पीच रिकॉग्निशन के लिए, 16000 Hz की आवृत्ति की आवश्यकता हो सकती है।
iOS पर, रिकॉर्डिंग विलंबता कॉन्फ़िगर करने के लिए AVAudioSession.setPreferredIOBufferDuration का उपयोग करें। छोटा बफ़र विलंबता कम करता है लेकिन CPU लोड बढ़ाता है। Android पर, AudioRecord.getMinBufferSize दिए गए मापदंडों के लिए न्यूनतम बफ़र आकार लौटाता है। उच्च सिस्टम लोड के तहत रिकॉर्डिंग करते समय डेटा हानि को रोकने के लिए इस न्यूनतम से कम नहीं बफ़र का उपयोग करने की अनुशंसा की जाती है।
सर्वोत्तम अभ्यास Microphone Permission के लिए उपयोगकर्ता के विश्वास को बढ़ाने और प्लेटफ़ॉर्म आवश्यकताओं के अनुपालन पर केंद्रित हैं।
Microphone Permission का अनुरोध करने से पहले, एक स्क्रीन दिखाएं जो बताए कि ऐप को माइक्रोफ़ोन की आवश्यकता क्यों है और रिकॉर्डिंग का उपयोग कैसे किया जाएगा। इंगित करें कि ऑडियो सर्वर पर प्रेषित होता है या स्थानीय रूप से संसाधित होता है। उपयोगकर्ता एक्सेस देने की अधिक संभावना रखते हैं यदि वे समझते हैं कि रिकॉर्डिंग डिवाइस नहीं छोड़ती है। स्थानीय प्रसंस्करण (ऑन-डिवाइस ASR) विश्वास के लिए एक मजबूत तर्क है।
यदि एप्लिकेशन को बैकग्राउंड ऑडियो रिकॉर्डिंग की आवश्यकता नहीं है, तो बैकग्राउंड में जाने पर माइक्रोफ़ोन को रोकना सुनिश्चित करें। इससे न केवल बैटरी बचती है बल्कि रिकॉर्डिंग संकेतक देखने पर उपयोगकर्ता की नकारात्मक प्रतिक्रिया भी रुकती है। iOS पर, रिकॉर्डिंग रोकने के लिए UIApplicationDelegate विधियों applicationDidEnterBackground का उपयोग करें। Android पर, Activity या Service में onPause और onStop को संभालें।
ऑडियो कैप्चर के दौरान अपना स्वयं का रिकॉर्डिंग संकेतक (एनिमेटेड माइक्रोफ़ोन आइकन या तरंग) दिखाएं। यह उपयोगकर्ता को सूचित करता है कि माइक्रोफ़ोन सक्रिय है और नकारात्मक प्रतिक्रिया के जोखिम को कम करता है। Apple और Google अधिकतम पारदर्शिता के लिए सिस्टम संकेतक को अपने UI तत्व के साथ दोहराने की सलाह देते हैं।
अक्सर पूछे जाने वाले प्रश्न
नहीं, माइक्रोफ़ोन अनुमति केवल माइक्रोफ़ोन से ऑडियो कैप्चर के लिए आवश्यक है। स्पीकर या हेडफ़ोन के माध्यम से ध्वनि चलाने के लिए Microphone Permission की आवश्यकता नहीं है। प्लेबैक के लिए, iOS पर ऑडियो सत्र या Android पर AudioTrack कॉन्फ़िगर करना पर्याप्त है।
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) का उपयोग करें। विधि PackageManager.PERMISSION_GRANTED या PERMISSION_DENIED लौटाती है। इसके अतिरिक्त, PackageManager.hasSystemFeature के माध्यम से जांचें कि डिवाइस पर माइक्रोफ़ोन उपलब्ध है या नहीं।
एक वैकल्पिक परिदृश्य प्रदान करें: वॉइस के बजाय टेक्स्ट इनपुट, ऑडियो के बिना संदेश भेजना, बिना ध्वनि के वीडियो देखना। यदि वॉइस इनपुट सुविधा महत्वपूर्ण है, तो सिस्टम सेटिंग्स में अनुमति सक्षम करने के निर्देशों और वहां जाने के बटन के साथ एक स्क्रीन दिखाएं।
Android 12 से शुरू होकर, बैकग्राउंड में कोई एप्लिकेशन माइक्रोफ़ोन तक नहीं पहुंच सकता। बैकग्राउंड में जाने पर सक्रिय रिकॉर्डिंग रोक दी जाती है। इसके अतिरिक्त, Privacy Chip संकेतक दिखाई दिया है — स्टेटस बार में एक हरा आइकन जो दिखाता है कि कोई एप्लिकेशन माइक्रोफ़ोन का उपयोग कर रहा है।
सबसे सामान्य कारण: NSMicrophoneUsageDescription कुंजी की कमी, गैर-विशिष्ट कारण विवरण (“सेवा में सुधार के लिए” के बजाय “वॉइस संदेश रिकॉर्ड करने के लिए”), स्पष्ट उपयोगकर्ता कार्रवाई के बिना अनुमति का अनुरोध, या उचित कार्यक्षमता के बिना बैकग्राउंड में माइक्रोफ़ोन का उपयोग।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें