2014-07-27 10 views
15

Mit der Einführung von iOS 7 müssen Anwendungen den Mikrofonzugriff anfordern, wenn sie Audio aufnehmen möchten.iOS prüft, ob Anwendung Zugriff auf Mikrofon hat

Wie überprüfe ich, ob die Anwendung Zugriff auf das Mikrofon hat?
Im iOS 8 SDK kann ich die AVAudioSessionRecordPermission enum verwenden, aber wie überprüfe ich das in iOS 7?

Info:
Ich möchte keine Erlaubnis anfordern, ich möchte nur überprüfen, ob die App Zugriff auf das Mikrofon hat. (Wie Standortzugriff):

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

ich eine ähnliche Frage hier beantwortet: http://stackoverflow.com/a/39250149/2870477 –

Antwort

20

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

gegeben

In iOS7 müssen Sie jedes Mal um Erlaubnis bitten mit

Die gleiche Frage wurde vor gefragt, aber es gibt keine solche api, mit dem Sie aktuelle Status kennen, wie in iOS8

können Sie Check for mic permission on iOS 7 without showing prompt siehe

Lösung:

Eine weitere Option ist, dass Sie kann die popup zeigen oder um Erlaubnis fragen erstmals und speichern Sie die Zustände der Benutzeroption in NSUserDefaults ausgewählt und dann fragen Sie nicht um Erlaubnis. Von docs Sie dies explizit müssen nicht anrufen, wenn jeder automatisch durch AVAudioSession erste Mal aufgerufen wird, wenn Sie aufzeichnen versuchen, um die Aufnahme keine Erlaubnis von user.It erhalten müssen

Audio bedarf der ausdrücklichen Zustimmung von der Benutzer. Die erste Zeit, die die Audiositzung Ihrer App versucht, eine Audioeingangsroute zu verwenden, während eine Kategorie verwendet wird, die die Aufzeichnung aktiviert (siehe "Audiositzung Kategorien"), fordert das System den Benutzer automatisch zur Erlaubnis auf; alternativ können Sie requestRecordPermission nennen: zu Aufforderung der Benutzer zu einem Zeitpunkt Ihrer

+0

funktioniert es funktioniert gut für mich !! Danke Mr. Codester !! –

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

Und umfassen <AVFoundation/AVAudioSession.h>

+1

Ich möchte keine Aufnahmeberechtigungen anfordern, ich möchte nur überprüfen, ob die Anwendung Zugriff auf das Mikrofon hat (wie bei einem Standortzugriff: '' [CLLocationManager authorizationStatus] '') – Lukas

+1

Es wird zum ersten Mal vom nächsten Zeitpunkt an gefragt wird es nicht erneut fragen – souvickcse

+0

So kann ich Mikrofon Zugang nur in iOS 8 überprüfen? – Lukas

33

wählen Sie können die mit recordPermission() überprüfen, die seit iOS verfügbar ist 8.

Beachten Sie, dass mit iOS starten 10, Sie müssen die NSMicrophoneUsageDescription Eigenschaft in Ihrem für Mikrofon Berechtigungen festlegen. Sie müssen einen Wert angeben, der in der Zugriffsanforderung angezeigt wird. Wenn Sie Ihre App lokalisieren, achten Sie darauf, dass Sie Ihre Plist-Zeichenfolgen für die Übersetzung angeben.

enter image description here

Geschieht dies nicht, wird zu einem Absturz führen, wenn das Mikrofon zuzugreifen versuchen.

Diese Antwort wurde bisher für wieder behoben Swift 4,0

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

Das gegen einen das Mikrofon des aktuellen Status für die Überprüfung iOS 10-Umgebung getestet worden ist.

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

ich diesen Code mit iOS getestet haben 8 für den Zweck, für Mikrofon Genehmigung der Überprüfung und den aktuellen Zustand 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; 
} 

Wie immer, stellen Sie sicher, import AVFoundation.

+0

FYI, die Eigenschaft zu Ihrer info.plist hinzufügen ist NSMicrophoneUsageDescription – Harris

+1

@Harris Danke, mein Screenshot abgeschnitten es, aber ich werde es deutlicher machen – CodeBender

8

Es gibt eine andere Art und Weise Sie für ios folgenden Code versuchen können, 7 und 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 
} 
3

Da keiner der anderen Antworten dies hier erwähnt, müssen Sie die Berechtigungen für Ihre info.plist hinzuzufügen. Insbesondere fügen Sie einen Eintrag für:

Privatleben - Mikrofon Verwendung Beschreibung

Für den String-Wert, geben Sie so etwas wie: (App-Name) benötigt Zugriff auf das Mikrofon.

Andernfalls erhalten Sie einen mysteriösen Absturz

6

Swift 3 Komplettlösung-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 
    } 
Verwandte Themen