2017-05-24 8 views
0

사용자가 응용 프로그램에서 마이크를 사용하고 info.plist "Privacy-MicrophoneUsageDescription"에 적절한 키를 추가하고 싶습니다. 사용자가 마이크 버튼을 누르면 사용법에 대한 질문 창이 나타납니다 권한이 나타납니다. 사용자가 "허용"을 탭하면 응용 프로그램이 문제없이 잘 작동합니다. 그러나 그렇지 않은 경우 마이크 버튼을 다시 누르면 앱이 다운됩니다.프로그래밍 방식으로 NSMicrophoneUsageDescription을 확인하는 방법

내가 원하는 것은 버튼을 누를 때마다 NSMicrophoneUsageDescription 상태를 확인하는 것입니다. 거부 된 경우 사용자에게 다시 권한을 요청하십시오. 빠른 3

답변

3

선택한 답은 requestRecordPermission 방법은 비동기이고 값이 return 문 올바른 방법으로 반환되기 전에 permissionCheck의 값을 변경하지 않습니다 작동하지 않습니다 이 return 문

2

:

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

을 나는 완료 핸들러를 포함하도록 선택한 답변을 수정

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

완료 핸들러를 사용하여 대신의 데 대해 이동 좋아, 항상 NSMicrophoneUsageDescription 클래스를 찾고있었습니다. 감사합니다. –

+0

requestRecordPermission 메서드는 async이므로 return 문 앞에 permissionCheck 값을 변경하는 데 사용할 수 없습니다. Bool 반환 값 대신에 완료 핸들러 – DatForis

+0

을 사용해야합니다. 동의 한 경우 여기에서 완료 핸들러를 사용해야합니다. – RMRAHUL