2017-10-14 84 views
0

我的应用程序崩溃时当我尝试请求允许使用iPhone的麦克风用下面的代码:应用程序崩溃请求允许使用iPhone的麦克风与iOS 11

var permissionGranted = false 
switch AVAudioSession.sharedInstance().recordPermission() { 
case AVAudioSessionRecordPermission.granted: 
    setupRecorder() 
    permissionGranted = true 
case AVAudioSessionRecordPermission.denied: 
    permissionGranted = false 
case AVAudioSessionRecordPermission.undetermined: 
    AVAudioSession.sharedInstance().requestRecordPermission { 
     [weak self] granted in 
     if granted { 
      self?.setupRecorder() 
     } 
    } 
default: 
    permissionGranted = false 
    break 
} 

我还添加NSMicrophoneUsageDescription到应用程序的信息。 plist用绳子。当我运行该应用程序时,它崩溃了,Xcode打印出一条错误消息,说我需要向plist添加NSMicrophoneUsageDescription

+1

你得到什么错误讯息? –

+0

更新您的问题,显示Info.plist的相关部分,验证您是否拥有正确的权限条目。 – rmaddy

+0

您确定您的项目的构建设置正在查找您的info.plist正确的路径吗? – MEnnabah

回答

0

试试以下功能

struct Manager { 
    static var recordingSession: AVAudioSession! 
    static var micAuthorised = Bool()   
} 

func CheckForPermission() 
    { 
     Manager.recordingSession = AVAudioSession.sharedInstance() 
     do 
     { 
      try Manager.recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker) 
//   try Manager.recordingSession.setPreferredSampleRate(16000) 
//   try Manager.recordingSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
//   try Manager.recordingSession.setActive(true) 
      Manager.recordingSession.requestRecordPermission({ (allowed) in 
       if allowed 
       { 
        Manager.micAuthorised = true 
        print("Mic Authorised") 
       } 
       else 
       { 
        Manager.micAuthorised = false 
        print("Mic not Authorised") 
       } 
      }) 
     } 
     catch 
     { 
      print("Failed to set Category", error.localizedDescription) 
     } 
    }