web-dev-qa-db-de.com

iOS prüfen, ob die Anwendung Zugriff auf das Mikrofon hat

Mit der Einführung von iOS 7 müssen Anwendungen den Mikrofonzugriff anfordern, wenn sie Audio aufnehmen möchten. 

Wie überprüfe ich, ob die Anwendung Zugriff auf das Mikrofon hat?
Im iOS 8-SDK kann ich die AVAudioSessionRecordPermission-Enumeration verwenden. Wie kann ich dies in iOS 7 überprüfen?

Info:
Ich möchte nicht um Erlaubnis bitten, ich möchte nur prüfen, ob die App Zugriff auf das Mikrofon hat. (Wie Standortzugang):

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

In iOS7 gibt es keine Möglichkeit, den aktuellen Status von microphone authorization abzurufen. Sie haben die Enumeration in iOS8 als AVAudioSessionRecordPermission angegeben.

In iOS7 müssen Sie jedes Mal die Erlaubnis mit einholen

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

Die gleiche Frage wurde schon einmal gestellt, aber es gibt keine solche API, mit der Sie den aktuellen Status wie in iOS8 kennen.

Sie können referenzieren Überprüfen Sie die Mikrofonberechtigung unter iOS 7, ohne Prompt anzuzeigen

Lösung:

Eine weitere Option ist, dass Sie die Variable popup anzeigen oder nach der Berechtigung first time fragen und die in NSUserDefaults ausgewählten Statusoptionen für die Benutzer speichern können. Danach fordern Sie keine Erlaubnis an Wenn Sie nicht alle die Erlaubnis des Benutzers benötigen, wird es beim ersten Versuch automatisch von AVAudioSession aufgerufen, wenn Sie versuchen, aufzunehmen

Das Aufnehmen von Audio erfordert die ausdrückliche Genehmigung des Benutzers. Der Erste Wenn die Audiositzung Ihrer App versucht, eine Audioeingangsroute zu verwenden Wenn Sie eine Kategorie verwenden, die die Aufnahme ermöglicht (siehe „Audiositzung Kategorien“), fordert das System den Benutzer automatisch zur Eingabe von Genehmigung; Alternativ können Sie requestRecordPermission: bis .__ aufrufen. Fordern Sie den Benutzer zu einem Zeitpunkt Ihrer Wahl auf

23
codester

Sie können das mit recordPermission () überprüfen, das seit iOS 8 verfügbar ist.

Beachten Sie, dass Sie ab iOS 10 müssen eingestellt die NSMicrophoneUsageDescription -Eigenschaft in Ihrem info.plist für Mikrofonberechtigungen festlegen. Sie müssen einen Wert angeben, der in der Zugriffsanforderung angezeigt wird. Wenn Sie Ihre App lokalisieren, müssen Sie Ihre Plist-Zeichenfolgen für die Übersetzung angeben.

 enter image description here

Andernfalls kann es zu einem Absturz kommen, wenn versucht wird, auf das Mikrofon zuzugreifen.

Diese Antwort wurde für Swift 4.x wieder aufgeräumt.

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

Dies wurde mit einer iOS 10-Umgebung getestet, um den aktuellen Status des Mikrofons zu überprüfen.

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
}

Ziel c

Ich habe diesen Code mit iOS 8 getestet, um die Mikrofonberechtigung zu prüfen und den aktuellen Status zu erhalten.

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;
}

Stellen Sie wie immer sicher, import AVFoundation.

54
CodeBender

Swift 3 Complete Lösungscode

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
    }
11
mriaz0011

Es gibt eine andere Möglichkeit, den folgenden Code für iOS 7 und 8 auszuprobieren:

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
        }
    }];

Und füge <AVFoundation/AVAudioSession.h> hinzu

5
souvickcse

Da keine der anderen Antworten dies erwähnt hat, müssen Sie die Berechtigungen zu Ihrer info.plist hinzufügen. Fügen Sie insbesondere einen Eintrag für Folgendes hinzu:

Datenschutz - Beschreibung der Mikrofonbenutzung

Geben Sie für den String-Wert Folgendes ein: (App-Name) benötigt Zugriff auf Ihr Mikrofon.

Ansonsten bekommst du einen mysteriösen Absturz 

3
Hugh

importieren Sie AVFoundation und verwenden Sie die folgende Funktion 

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