Microphone Permission: ماهیت، انواع دسترسی و اصل کار

نویسنده: IT Sectr منتشر شده: 2026-05-21 زمان مطالعه: 8 دقیقه

Microphone Permission — این یک مجوز سیستمی است که برنامه برای دسترسی به میکروفون دستگاه به آن نیاز دارد. برای ضبط صدا، پیام‌های صوتی، تماس‌های تصویری و تشخیص گفتار لازم است. بر اساس Apple Developer Documentation, 2024، همه برنامه‌هایی که از ضبط صدا استفاده می‌کنند موظف هستند از طریق دیالوگ سیستمی رضایت صریح کاربر را دریافت کنند.

نکات اصلی

  • Microphone Permission — مجوز اجباری برای هر برنامه‌ای است که روی دستگاه موبایل صدا ضبط می‌کند.
  • Android از Manifest.permission.RECORD_AUDIO با درخواست زمان اجرا از API 23 استفاده می‌کند.
  • iOS به کلید NSMicrophoneUsageDescription در Info.plist و فراخوانی AVAudioSession.requestRecordPermission نیاز دارد.
  • درخواست در لحظه فعال‌سازی میکروفون (دکمه «ضبط پیام صوتی») شانس تأیید را افزایش می‌دهد.
  • کار در پس‌زمینه با میکروفون نیاز به مجوزهای اضافی و توجیه دقیق دارد.

ماهیت Microphone Permission

Microphone Permission — مکانیزم حفاظت از حریم خصوصی است که از ضبط غیرمجاز صدا از میکروفون دستگاه جلوگیری می‌کند. پلتفرم‌های موبایل میکروفون را به عنوان یکی از حساس‌ترین منابع طبقه‌بندی می‌کنند، زیرا ضبط صدا می‌تواند مکالمات خصوصی، محیط اطراف و اطلاعات محرمانه را ضبط کند.

Android RECORD_AUDIO را به عنوان مجوز خطرناک طبقه‌بندی می‌کند و iOS نیاز به افزودن اجباری کلید NSMicrophoneUsageDescription در Info.plist دارد. در هر دو پلتفرم، درخواست در زمان اجرا انجام می‌شود و کاربر می‌تواند در هر لحظه مجوز را از طریق تنظیمات سیستم لغو کند. نشانگر سیستم ضبط (نقطه نارنجی در iOS، نشانگر سبز در Android 12+) به کاربر نشان می‌دهد که برنامه در حال حاضر از میکروفون استفاده می‌کند.

بر اساس تحقیق Pew Research Center (2024)، 54% از کاربران دستگاه‌های موبایل حداقل یک بار دسترسی به میکروفون را به برنامه‌ای رد کرده‌اند. دلیل اصلی — عدم درک این موضوع است که چرا برنامه به ضبط صدا نیاز دارد. بنابراین توسعه‌دهنده باید هدف استفاده از میکروفون را تا حد امکان شفاف توضیح دهد.

مجوز میکروفون در Android

مجوز میکروفون در Android از طریق اعلام RECORD_AUDIO در مانیفست و درخواست زمان اجرا در کد برنامه درخواست می‌شود. از Android 10 به بعد، دسترسی به میکروفون additionally با محدودیت‌هایی برای برنامه‌های پس‌زمینه تنظیم می‌شود.

اعلام در AndroidManifest.xml

اولین مرحله — اعلام مجوز RECORD_AUDIO در فایل مانیفست است. بدون این اعلام، درخواست زمان اجرا اثری نخواهد داشت و برنامه نمی‌تواند به میکروفون دسترسی پیدا کند.

xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

CAPTURE_AUDIO_OUTPUT یک مجوز سیستمی است که برای برنامه‌های شخص ثالث در دسترس نیست. فقط توسط برنامه‌های سیستمی برای ضبط خروجی صدا استفاده می‌شود. برنامه‌های معمولی برای ضبط از میکروفون فقط به RECORD_AUDIO نیاز دارند.

درخواست زمان اجرا در Kotlin

پس از اعلام در مانیفست، باید درخواست زمان اجرا را انجام داد. بیایید مثالی از استفاده از AudioRecord برای ضبط صدا از میکروفون را بررسی کنیم.

kotlin
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

مجوز میکروفون در iOS از طریق کلید NSMicrophoneUsageDescription در Info.plist و فراخوانی متد AVAudioSession.requestRecordPermission پیکربندی می‌شود. Apple نیاز به ذکر اجباری دلیل استفاده از میکروفون در دیالوگ درخواست دارد.

پیکربندی Info.plist

کلید NSMicrophoneUsageDescription برای هر برنامه‌ای که دسترسی به میکروفون را درخواست می‌کند الزامی است. بدون آن برنامه در تلاش برای ضبط صدا خراب می‌شود.

xml
<key>NSMicrophoneUsageDescription</key>
<string>برنامه برای ضبط یادداشت‌های صوتی و ارسال پیام‌های صوتی به دسترسی میکروفون نیاز دارد.</string>

درخواست در Swift

درخواست دسترسی به میکروفون در iOS از طریق AVAudioSession انجام می‌شود. پس از دریافت پاسخ، برنامه جلسه صوتی را پیکربندی کرده و ضبط را شروع می‌کند.

swift
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 پس از فشار دادن دکمه ضبط درخواست می‌شود. پس از اتمام ضبط، مهم است که جلسه صوتی متوقف شود تا سایر برنامه‌ها بتوانند از میکروفون استفاده کنند. AVAudioSession در iOS و AudioManager در Android فوکوس صوتی را مدیریت می‌کنند.

تشخیص گفتار

برنامه‌های دارای ورودی صوتی (جستجو، دیکته، دستیاران صوتی) از میکروفون همراه با API تشخیص گفتار استفاده می‌کنند. در Android این SpeechRecognizer از android.speech است، در iOS — SFSpeechRecognizer از Speech framework. برای تشخیص گفتار ممکن است مجوز اضافی برای دسترسی به سرویس‌های تشخیص مورد نیاز باشد (SPEECH در Android، SFSpeechRecognizer.requestAuthorization در iOS).

تماس‌های تصویری و استریمینگ

برنامه‌های تماس تصویری (WebRTC، Zoom، Telegram) Microphone Permission را همزمان با Camera Permission درخواست می‌کنند. در این زمینه مهم است که هر دو مجوز را به صورت متوالی درخواست کنید، نه همزمان، تا کاربر با دیالوگ‌ها overload نشود. WebRTC از getUserMedia برای ضبط صدا و تصویر استفاده می‌کند، اما در پلتفرم‌های موبایل ابتدا به مجوزهای سیستمی نیاز دارد.

پیکربندی جلسه صوتی

برای ضبط با کیفیت بالا، پیکربندی صحیح پارامترهای جلسه صوتی مورد نیاز است. در iOS دسته .playAndRecord امکان پخش و ضبط همزمان صدا را فراهم می‌کند. در Android انتخاب AudioSource.MIC ضبط از میکروفون اصلی را تضمین می‌کند و AudioSource.VOICE_COMMUNICATION ضبط را برای ارتباط صوتی بهینه می‌کند. علاوه بر این، می‌توان فرکانس نمونه‌برداری 44100 هرتز و فرمت PCM 16 بیت را برای دستیابی به کیفیت استاندارد CD پیکربندی کرد.

مدیریت وقفه‌های ضبط

در طول ضبط صدا ممکن است وقفه‌های سیستمی رخ دهد: تماس ورودی، زنگ هشدار، اعلان از برنامه دیگر. در iOS AVAudioSessionDelegate beginInterruption و endInterruption را مدیریت می‌کند. در Android AudioManager.OnAudioFocusChangeListener برنامه را از دست دادن یا بازگشت فوکوس صوتی مطلع می‌کند. مدیریت صحیح وقفه‌ها امکان حفظ ضبط در رویدادهای غیرمنتظره و جلوگیری از از دست رفتن داده‌ها را فراهم می‌کند. توصیه می‌شود در زمان از دست دادن فوکوس ضبط را متوقف کرده و پس از بازگشت آن با اطلاع کاربر از سر گرفته شود.

بهینه‌سازی ضبط صدا

بهینه‌سازی ضبط صدا شامل پیکربندی فرکانس نمونه‌برداری، اندازه بافر و فرمت کدگذاری است. برای پیام‌های صوتی فرکانس 44100 هرتز و کانال مونو کافی است. برای تشخیص گفتار ممکن است فرکانس 16000 هرتز مورد نیاز باشد.

در iOS از AVAudioSession.setPreferredIOBufferDuration برای پیکربندی تأخیر ضبط استفاده کنید. بافر کوچکتر تأخیر را کاهش می‌دهد اما بار پردازنده را افزایش می‌دهد. در Android AudioRecord.getMinBufferSize حداقل اندازه بافر را برای پارامترهای مشخص شده برمی‌گرداند. توصیه می‌شود برای جلوگیری از از دست رفتن داده‌ها در طول ضبط در شرایط بار بالای سیستم، از بافری کمتر از این حداقل استفاده نکنید.

بهترین روش‌های کار با میکروفون

بهترین روش‌ها کار با Microphone Permission با هدف افزایش اعتماد کاربر و مطابقت با الزامات پلتفرم‌ها است.

هدف را قبل از ضبط توضیح دهید

قبل از درخواست Microphone Permission صفحه‌ای نشان دهید که در آن توضیح دهید چرا برنامه به میکروفون نیاز دارد و ضبط چگونه استفاده خواهد شد. مشخص کنید که آیا صدا به سرور ارسال می‌شود یا به صورت محلی پردازش می‌شود. کاربران در صورت درک این که ضبط دستگاه را ترک نمی‌کند، بسیار بیشتر به دسترسی رضایت می‌دهند. پردازش محلی (on-device ASR) یک استدلال قوی برای اعتماد است.

ضبط را در پس‌زمینه متوقف کنید

اگر برنامه نیازی به ضبط پس‌زمینه صدا ندارد، حتماً هنگام انتقال به حالت پس‌زمینه میکروفون را متوقف کنید. این نه تنها باتری را ذخیره می‌کند، بلکه از واکنش منفی کاربر که نشانگر ضبط را می‌بیند جلوگیری می‌کند. در iOS از متدهای UIApplicationDelegate applicationDidEnterBackground برای توقف ضبط استفاده کنید. در Android onPause و onStop را در Activity یا Service مدیریت کنید.

از نشانگرهای ضبط استفاده کنید

نشانگر ضبط خود (آیکون میکروفون متحرک یا موج) را در طول ضبط صدا نمایش دهید. این به کاربر اطلاع می‌دهد که میکروفون فعال است و خطر واکنش منفی را کاهش می‌دهد. Apple و Google برای حداکثر شفافیت توصیه می‌کنند نشانگر سیستم را با عنصر UI خود تکرار کنید.

سوالات متداول

آیا برای پخش صدا به Microphone Permission نیاز است؟

خیر، مجوز میکروفون فقط برای ضبط صدا از میکروفون مورد نیاز است. پخش صدا از طریق بلندگو یا هدفون نیازی به Microphone Permission ندارد. برای پخش کافی است جلسه صوتی را در iOS یا AudioTrack را در Android پیکربندی کنید.

چگونه وضعیت Microphone Permission را در Android بررسی کنیم؟

از ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) استفاده کنید. متد PackageManager.PERMISSION_GRANTED یا PERMISSION_DENIED را برمی‌گرداند. علاوه بر این، از طریق PackageManager.hasSystemFeature بررسی کنید که آیا میکروفون روی دستگاه موجود است یا خیر.

اگر کاربر Microphone Permission را رد کرد چه باید کرد؟

یک سناریوی جایگزین پیشنهاد دهید: ورودی متنی به جای صوتی، ارسال پیام بدون صدا، تماشای ویدیو بدون صدا. اگر عملکرد صوتی حیاتی است، صفحه‌ای با راهنمای فعال‌سازی مجوز در تنظیمات سیستم و دکمه انتقال نشان دهید.

Microphone Permission در Android 12+ چگونه کار می‌کند؟

از Android 12 به بعد، برنامه در پس‌زمینه نمی‌تواند به میکروفون دسترسی پیدا کند. ضبط فعال هنگام انتقال به پس‌زمینه متوقف می‌شود. علاوه بر این، نشانگر Privacy Chip ظاهر شده است — یک آیکون سبز در نوار وضعیت که نشان می‌دهد برنامه از میکروفون استفاده می‌کند.

چرا App Store برنامه دارای Microphone Permission را رد کرد؟

شایع‌ترین دلایل: فقدان کلید NSMicrophoneUsageDescription، توضیح غیرمشخص دلیل («برای ضبط پیام‌های صوتی» به جای «برای بهبود سرویس»)، درخواست مجوز بدون اقدام واضح کاربر یا استفاده از میکروفون در پس‌زمینه بدون عملکرد موجه.

خلاصه

  • Microphone Permission — مجوز سیستمی برای ضبط صدا، اجباری در هر دو پلتفرم موبایل.
  • Android از RECORD_AUDIO با درخواست زمان اجرا و محدودیت دسترسی پس‌زمینه از Android 10 استفاده می‌کند.
  • iOS به NSMicrophoneUsageDescription در Info.plist و فراخوانی AVAudioSession.requestRecordPermission با توضیح اجباری دلیل نیاز دارد.
  • نشانگرهای سیستم (نقطه نارنجی در iOS، Privacy Chip در Android) کاربر را از فعالیت میکروفون مطلع می‌کنند.
  • سناریوهای استفاده شامل پیام‌های صوتی، تشخیص گفتار، تماس‌های تصویری و ضبط صدا هستند.
  • ضبط در پس‌زمینه در هر دو پلتفرم به شدت محدود شده و نیاز به مجوزهای اضافی و توجیه دارد.
  • سناریوهای جایگزین در صورت رد (ورودی متنی، ارسال بدون صدا) برای عملکرد صحیح برنامه الزامی هستند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید