请求在 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 上不起作用