2017-05-24 11 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メソッドは非同期なので、returnステートメントの前にpermissionCheckの値を変更するために使用することはできません。 Boolの戻り値の代わりに、完了ハンドラを使用する必要があります。 – DatForis

+0

合意しました。ここで補完ハンドラを使用してください。 – RMRAHUL

関連する問題