2017-05-24 170 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

相關問題