web-dev-qa-db-ja.com

iOSがアプリケーションにマイクへのアクセス権があるかどうかを確認します

IOS 7の導入により、アプリケーションは、オーディオを録音するときにマイクへのアクセスを要求する必要があります。

アプリケーションがマイクにアクセスできるかどうかを確認するにはどうすればよいですか?
iOS 8 SDKではAVAudioSessionRecordPermission列挙型を使用できますが、iOS 7でこれを確認するにはどうすればよいですか?

情報:
許可をリクエストしたくありません。アプリがマイクにアクセスできるかどうかを確認したいだけです。 (ロケーションアクセスと同様):

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
    // Do something
}
24
130e13a

iOS7には、microphone authorizationの現在のステータスを取得する方法がありません。彼らはiOS8の列挙型を AVAudioSessionRecordPermission として指定しました

iOS7では、毎回許可をリクエストする必要があります

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        if (granted) {
            NSLog(@"Permission granted");
        }
        else {
            NSLog(@"Permission denied");
        }
    }];

同じ質問が以前に聞かれましたが、iOS8のような現在のステータスを知っているAPIはありません

参照することができます プロンプトを表示せずにiOS 7でマイクの許可を確認してください

解決策:

別のオプションは、popupを表示するか、許可を求める初回で、NSUserDefaults以降は許可を求めません。ドキュメントから、ユーザーの許可を取得する必要がない場合、明示的にこれを呼び出す必要はありません。記録しようとすると、最初にAVAudioSessionによって自動的に呼び出されます

オーディオの録音には、ユーザーの明示的な許可が必要です。アプリのオーディオセッションが録音を有効にするカテゴリ(「オーディオセッションカテゴリ」を参照)を使用しているときにオーディオ入力ルートを初めて使用しようとすると、システムは自動的にユーザーに許可を求めます。または、requestRecordPermission:を呼び出して、選択したときにユーザーにプロンプ​​トを出すことができます。

27
codester

recordPermission() で確認できます。これはiOS 8以降で利用可能です。

IOS 10以降では、マイクの許可を得るためにinfo.plistNSMicrophoneUsageDescriptionプロパティを設定する必要があるに注意してください。アクセスリクエストに表示される値を指定する必要があります。アプリをローカライズする場合は、翻訳用のplist文字列を必ず含めてください。

enter image description here

そうしないと、マイクにアクセスしようとするとクラッシュします。

この答えはSwift 4.xで再び整理されました

import AVFoundation

switch AVAudioSession.sharedInstance().recordPermission {
case AVAudioSessionRecordPermission.granted:
    print("Permission granted")
case AVAudioSessionRecordPermission.denied:
    print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
    print("Request permission here")
    AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
        // Handle granted
    })
}

Swift 3.

これは、マイクの現在の状態を確認するためにiOS 10環境に対してテストされています。

import AVFoundation

switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
    print("Permission granted")
case AVAudioSessionRecordPermission.denied:
    print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
    print("Request permission here")
default:
    break
}

Objective-C

マイクの許可を確認し、現在の状態を取得するために、このコードをiOS 8でテストしました。

switch ([[AVAudioSession sharedInstance] recordPermission]) {
    case AVAudioSessionRecordPermissionGranted:

        break;
    case AVAudioSessionRecordPermissionDenied:

        break;
    case AVAudioSessionRecordPermissionUndetermined:
        // This is the initial state before a user has made any choice
        // You can use this spot to request permission here if you want
        break;
    default:
        break;
}

いつものように、import AVFoundationを確認してください。

58
CodeBender

Swift 3 Complete Solution Code

func checkMicPermission() -> Bool {

        var permissionCheck: Bool = false

        switch AVAudioSession.sharedInstance().recordPermission() {
        case AVAudioSessionRecordPermission.granted:
            permissionCheck = true
        case AVAudioSessionRecordPermission.denied:
            permissionCheck = false
        case AVAudioSessionRecordPermission.undetermined:
            AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
                if granted {
                    permissionCheck = true
                } else {
                    permissionCheck = false
                }
            })
        default:
            break
        }

        return permissionCheck
    }
13
mriaz0011

IOS 7および8の次のコードを試す別の方法があります。

let microPhoneStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)

switch microPhoneStatus {
    case .Authorized:
        // Has access
    case .Denied:
        // No access granted
    case .Restricted:
        // Microphone disabled in settings
    case .NotDetermined:
        // Didn't request access yet
}
8
user3873271
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
        }
        else {
            // Microphone disabled code
        }
    }];

そして、<AVFoundation/AVAudioSession.h>

5
souvickcse

ここに記載されている他の回答にはこれについて言及されていないため、info.plistにアクセス許可を追加する必要があります。具体的には、次のエントリを追加します。

プライバシー-マイクの使用法の説明

文字列値には、次のように入力します:(アプリ名)マイクへのアクセスが必要です。

そうしないと、神秘的なクラッシュが発生します

3
Hugh

aVFoundationをインポートし、次の関数を使用します

var permissionCheck:Bool = false

switch AVAudioSession.sharedInstance().recordPermission {

        case AVAudioSession.RecordPermission.granted:
            permissionCheck = true

        case AVAudioSession.RecordPermission.denied:
            permissionCheck = false
        case AVAudioSession.RecordPermission.undetermined:
            AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
                if granted {
                    permissionCheck = true
                } else {
                    permissionCheck = false
                }
            })
        default:
            break
        }
0
varunrathi28