请求在 iOS 11 中使用 iPhone 麦克风的权限时应用程序崩溃

Posted

技术标签:

【中文标题】请求在 iOS 11 中使用 iPhone 麦克风的权限时应用程序崩溃【英文标题】:App Crashes when Requesting Permission to Use iPhone's Microphone with iOS 11 【发布时间】:2017-10-14 02:24:28 【问题描述】:

当我尝试使用以下代码请求使用 iPhone 麦克风的权限时,我的应用程序崩溃了:

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 添加到应用程序的 Info.plist 中。当我运行该应用程序时,它会崩溃并且 Xcode 会打印一条错误消息,提示我需要将 NSMicrophoneUsageDescription 添加到 plist。

【问题讨论】:

你得到什么错误信息? 更新您的问题,显示您的 Info.plist 的相关部分,以验证您拥有正确的权限条目。 您确定您的项目的构建设置正在定位您的 info.plist 正确路径吗? @MEnnabah 我怀疑你是对的。我创建了一个新项目并添加了现有代码,该应用程序按预期运行。 很好,在构建设置中检查文件路径 【参考方案1】:

试试下面的函数

 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)
        
    

【讨论】:

以上是关于请求在 iOS 11 中使用 iPhone 麦克风的权限时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS:音频单元 RemoteIO 在 iPhone 上不起作用

如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF

从两个麦克风录制 - ios

iOS SDK 禁用内置麦克风

从 iOS 中的所有 3 个麦克风录制

在 iOS 中通过蓝牙播放时从内置麦克风录制