iOS проверьте, имеет ли приложение доступ к микрофону

С введением iOS 7 приложения должны запрашивать доступ к микрофону, когда они хотят записывать аудио.

Как проверить, имеет ли приложение доступ к микрофону?
В iOS 8 SDK я могу использовать AVAudioSessionRecordPermission перечисление, но как проверить это в iOS 7?

информация:
Я не хочу запрашивать разрешение, я просто хочу проверить, имеет ли приложение доступ к микрофону. (Как местоположение):

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

6 ответов


на iOS7 нет способа получить текущий статус microphone authorization.Они дали enum в iOS8 as AVAudioSessionRecordPermission

на iOS7 вы должны запрашивать разрешение каждый раз с

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

тот же вопрос был задан раньше, но нет такого api, с которым вы знаете текущий статус, как в iOS8

вы можете обратиться проверьте разрешение микрофона на iOS 7 без показа строки

устранение:

другой вариант-вы можете показать popup или попросить разрешение первый раз и сохранить состояние параметра пользователя, выбранного в NSUserDefaults и чем дальше не спрашивать разрешения. Из документов вам явно не нужно вызывать это, если каждому вам не нужно получать разрешение пользователя.Он будет автоматически вызываться AVAudioSession первый раз, когда вы пытаетесь записать

запись аудио требует явного разрешения от пользователя. Первый время попыток аудиосессии вашего приложения использовать маршрут аудиовхода при использовании категории, которая позволяет записывать (см. " Audio Session Категории"), система автоматически запрашивает у пользователя разрешение; кроме того, вы можете вызвать requestRecordPermission: to подскажите пользователю в момент вашего выбора


вы можете проверить с recordPermission(), который был доступен с iOS 8.

имейте в виду, что начиная с iOS 10, вы должны the NSMicrophoneUsageDescription свойства info.plist для микрофона разрешения. Необходимо указать значение, которое будет показано в запросе доступа, и при локализации приложения обязательно включите строки 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.0

это было протестировано против среды 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
}

С

я протестировал этот код с 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.


Swift 3 Полный Код Решения

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
    }

есть еще один способ попробовать следующий код для 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
}

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

и включения <AVFoundation/AVAudioSession.h>


поскольку ни один из других ответов здесь не упоминал об этом, вам нужно добавить разрешения к своей информации.файл plist. В частности, добавьте запись для:

Конфиденциальность-Описание Использования Микрофона

в строке "значение" введите что-то вроде: (Имя приложения) необходим доступ к микрофону.

в противном случае, вы получите таинственный аварии