2017-05-24 140 views
0

我希望用户在应用中使用麦克风,并将相应的密钥添加到info.plist“Privacy-MicrophoneUsageDescription”, 如果用户点击麦克风按钮,许可出现。如果用户点击“允许”,该应用程序工作正常,没有一些问题。但是,如果没有,并再次按下麦克风按钮,应用程序崩溃。如何以编程方式检查NSMicrophoneUsageDescription

我想要的是,以检查NSMicrophoneUsageDescription状态,每次按下按钮时。如果被拒绝,请再次询问用户的许可。

回答

3

选择的答案是行不通的requestRecordPermission方法是异步,并在返回语句的正确方法返回值之前它不会改变的PermissionCheck的价值去了解它使用的是完成处理

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

我修改所选的答案,包括完成处理,而不是它有一个return语句

2

的SWIFT 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

很好,我一直在寻找NSMicrophoneUsageDescription类,谢谢:) –

+0

requestRecordPermission方法是异步的,因此它不能用于在return语句之前改变permissionCheck的值。代替Bool返回值,你应该使用完成处理程序 – DatForis

+0

同意,我们应该在这里使用完成处理程序。 – RMRAHUL

相关问题