Microphone Permission: 本質、アクセスタイプ、動作原理

著者: IT Sectr 公開日: 2026-05-21 読了時間: 8 分

Microphone Permissionは、アプリケーションがデバイスのマイクにアクセスするために必要なシステム権限です。オーディオ録音、ボイスメッセージ、ビデオ通話、音声認識に必要です。Apple Developer Documentation、2024によると、オーディオキャプチャを使用するすべてのアプリケーションは、システムダイアログを通じて明示的なユーザーの同意を求める義務があります。

重要ポイント

  • Microphone Permissionは、モバイルデバイスでオーディオを録音するアプリケーションに必須の権限です。
  • AndroidはAPI 23以降、Manifest.permission.RECORD_AUDIOを実行時リクエストで使用します。
  • iOSはInfo.plistにNSMicrophoneUsageDescriptionキーとAVAudioSession.requestRecordPermissionの呼び出しが必要です。
  • マイク起動の瞬間にリクエスト(“ボイスメッセージを録音”ボタン)すると承認率が向上します。
  • マイクを使用したバックグラウンド作業には追加の権限と厳格な正当性が必要です。

Microphone Permissionの本質

Microphone Permissionは、デバイスのマイクから不正なオーディオ録音を防ぐプライバシー保護メカニズムです。モバイルプラットフォームは、オーディオ録音が個人の会話、周囲の環境、機密情報をキャプチャする可能性があるため、マイクを最も機密性の高いリソースの一つと見なしています。

AndroidはRECORD_AUDIOを危険な権限に分類し、iOSはInfo.plistにNSMicrophoneUsageDescriptionキーを必須で追加する必要があります。両方のプラットフォームで、リクエストは実行時に行われ、ユーザーはシステム設定からいつでも権限を取り消せます。システムの録音インジケーター(iOSのオレンジ色の点、Android 12+の緑色のインジケーター)は、アプリケーションが現在マイクを使用していることをユーザーに知らせます。

Pew Research Center(2024)の調査によると、モバイルデバイスユーザーの54%が少なくとも一度はアプリケーションのマイクアクセスを拒否しています。主な理由は、アプリがなぜオーディオ録音を必要とするのか理解できないことです。したがって、開発者はマイク使用の目的を可能な限り透明に説明する必要があります。

Androidでのマイク権限

Androidでのマイク権限は、マニフェストでRECORD_AUDIOを宣言し、アプリケーションコードで実行時リクエストを行うことによって要求されます。Android 10以降、マイクへのアクセスはバックグラウンドアプリケーションの制限によってさらに規制されています。

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でのマイク権限は、Info.plistのNSMicrophoneUsageDescriptionキーと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が要求されます。録音完了後は、他のアプリケーションがマイクを使用できるようにオーディオセッションを停止することが重要です。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を要求する前に、アプリがなぜマイクを必要とし、録音がどのように使用されるかを説明する画面を表示します。オーディオがサーバーに送信されるか、ローカルで処理されるかを示します。録音がデバイスから出ないことを理解すれば、ユーザーはアクセスを許可する可能性が大幅に高まります。ローカル処理(オンデバイスASR)は信頼を得る強力な根拠です。

バックグラウンドで録音を停止する

アプリケーションがバックグラウンドでのオーディオ録音を必要としない場合、バックグラウンドに移行する際に必ずマイクを停止してください。これによりバッテリーを節約するだけでなく、録音インジケーターを見たユーザーの否定的な反応も防げます。iOSでは、録音を一時停止するためにUIApplicationDelegateのapplicationDidEnterBackgroundメソッドを使用します。Androidでは、ActivityまたはServiceでonPauseとonStopを処理します。

録音インジケーターを使用する

オーディオキャプチャ中に独自の録音インジケーター(アニメーション化されたマイクアイコンや波形)を表示します。これにより、マイクがアクティブであることがユーザーに伝わり、否定的な反応のリスクが軽減されます。AppleとGoogleは、最大限の透明性のためにシステムインジケーターを独自のUI要素で複製することを推奨しています。

よくある質問

オーディオ再生にMicrophone Permissionは必要ですか?

いいえ、マイク権限はマイクからのオーディオキャプチャにのみ必要です。スピーカーやヘッドフォンからのサウンド再生にはMicrophone Permissionは不要です。再生には、iOSでオーディオセッションを構成するか、AndroidでAudioTrackを構成すれば十分です。

AndroidでMicrophone Permissionのステータスを確認するには?

ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO)を使用します。このメソッドはPackageManager.PERMISSION_GRANTEDまたはPERMISSION_DENIEDを返します。さらに、PackageManager.hasSystemFeatureを使用してデバイスでマイクが利用可能かどうかを確認します。

ユーザーがMicrophone Permissionを拒否した場合の対処法は?

代替シナリオを提供します:音声の代わりにテキスト入力、オーディオなしでメッセージを送信、音声なしでビデオを視聴。音声入力機能が重要な場合は、システム設定で権限を有効にする方法の説明とそこに移動するボタンを表示します。

Android 12+でMicrophone Permissionはどのように機能しますか?

Android 12以降、バックグラウンドのアプリケーションはマイクにアクセスできません。バックグラウンドに移行するとアクティブな録音は一時停止されます。さらに、Privacy Chipインジケーターが導入されました—ステータスバーの緑色のアイコンで、アプリケーションがマイクを使用していることを示します。

Microphone Permissionを含むアプリがApp Storeでリジェクトされた理由は?

最も一般的な理由:NSMicrophoneUsageDescriptionキーの欠落、不特定な理由の説明(“ボイスメッセージの録音用”ではなく“サービス改善のため”)、明示的なユーザーアクションなしでの権限要求、または正当な機能なしでのバックグラウンドでのマイク使用です。

まとめ

  • Microphone Permissionはオーディオキャプチャのためのシステム権限で、両方のモバイルプラットフォームで必須です。
  • AndroidはAndroid 10以降、実行時リクエストとバックグラウンドアクセス制限付きでRECORD_AUDIOを使用します。
  • iOSはInfo.plistにNSMicrophoneUsageDescriptionと、必須の理由説明付きのAVAudioSession.requestRecordPermission呼び出しが必要です。
  • システムインジケーター(iOSのオレンジ色の点、AndroidのPrivacy Chip)がマイクのアクティビティをユーザーに通知します。
  • 使用シナリオには、ボイスメッセージ、音声認識、ビデオ通話、オーディオ録音が含まれます。
  • バックグラウンド録音は両プラットフォームで厳しく制限されており、追加の権限と正当性が必要です。
  • 拒否時の代替シナリオ(テキスト入力、オーディオなしでの送信)はアプリの適切な動作に必須です。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください