2017-05-24 8 views
0

Ich möchte, dass der Benutzer das Mikrofon in der App verwenden, und fügen Sie den entsprechenden Schlüssel der info.plist "Privacy-MicrophoneUsageDescription", Wenn Benutzer tippen Sie auf das Mikrofon, Fenster mit einer Frage zur Verwendung Erlaubnis erscheint. Wenn der Benutzer auf "Zulassen" klickt, funktioniert die App ohne Probleme. Wenn nicht, und drücken Sie die Mikrofontaste erneut, die App stürzt ab.wie programmgesteuert NSMicrophoneUsageDescription zu überprüfen

Was ich will ist, zu überprüfen, für den NSMicrophoneUsageDescription-Status, jedes Mal, wenn die Taste gedrückt wird. Wenn Sie abgelehnt werden, fragen Sie den Benutzer erneut nach der Berechtigung.

Antwort

3

Die gewählte Antwort wird nicht funktionieren, die requestRecordPermission Methode ist async und es wird den Wert von permissionCheck nicht ändern, bevor der Wert in der return-Anweisung zurückgegeben wird, ist der richtige Weg zu gehen über eine Abschluss-Handler

func askMicroPhonePermission(completion: @escaping (_ success: Bool)-> Void) { 
    switch AVAudioSession.sharedInstance().recordPermission() { 
    case AVAudioSessionRecordPermission.granted: 
     completion(true) 
    case AVAudioSessionRecordPermission.denied: 
     completion(false) //show alert if required 
    case AVAudioSessionRecordPermission.undetermined: 
     AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in 
      if granted { 
       completion(true) 
      } else { 
       completion(false) // show alert if required 
      } 
     }) 
    default: 
     completion(false) 
    } 
} 

ich die gewählte Antwort einheitlich um einen Abschluss Handler statt es verwendet mit einer return-Anweisung

2

Für schnelle 3:

func askMicroPhonePermission() { 
    switch AVAudioSession.sharedInstance().recordPermission() { 
    case AVAudioSessionRecordPermission.granted: 
     //permissionCheck = true 
    case AVAudioSessionRecordPermission.denied: 
     // permissionCheck = false //show alert if required 
    case AVAudioSessionRecordPermission.undetermined: 
     AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in 
      if granted { 
       //permissionCheck = true 
      } else { 
       //permissionCheck = false // show alert if required or completion handler 
      } 
     }) 
    default: 
     break 
    } 
} 
+0

großartig, die ganze Zeit, die ich nach NSMicrophoneUsageDescription-Klasse suchte, danke :) –

+0

Die requestRecordPermission-Methode ist async und daher kann es nicht verwendet werden, um den Wert von permissionCheck vor der return-Anweisung zu ändern. Anstelle eines Bool-Rückgabewerts sollten Sie einen Completion-Handler verwenden. – DatForis

+0

Einverstanden, Wir sollten den Completion-Handler hier verwenden. – RMRAHUL

Verwandte Themen