AVAudioSession 斯威夫特
Posted
技术标签:
【中文标题】AVAudioSession 斯威夫特【英文标题】:AVAudioSession Swift 【发布时间】:2014-06-20 01:47:34 【问题描述】:我正在尝试编写一个快速的 ios 应用程序来记录用户的声音。我已经快速编写了以下代码,但是它无法向用户请求麦克风权限。它打印授权但它从不记录音频,并且在隐私下的设置窗格中它没有列出该应用程序。如何在 swift 中请求录制权限?
var session: AVAudioSession = AVAudioSession.sharedInstance()
session.requestRecordPermission((granted: Bool)-> Void in
if granted
println(" granted")
session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
session.setActive(true, error: nil)
self.recorder.record()
else
println("not granted")
)
【问题讨论】:
【参考方案1】:从 iOS 7 开始,您需要检查它是否响应选择器 requestRecordPermission:
我已经使用带有 iOS 8 Beta 的 iPhone 5S 测试了这段代码,它运行良好。一旦您授予权限,系统将不会再次请求它。
值得一提的是,它在使用模拟器时并没有请求许可。
这是我尝试过并且正在运行的代码:
if (session.respondsToSelector("requestRecordPermission:"))
AVAudioSession.sharedInstance().requestRecordPermission((granted: Bool)-> Void in
if granted
println("granted")
session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
session.setActive(true, error: nil)
self.recorder ()
else
println("not granted")
)
【讨论】:
我确实检查了我之前没有发布的行并且它没有工作......可能是因为我正在使用模拟器。我已经尝试加载到我的设备上,但是有一个错误,它说它不受支持(许多雷达也已被其他人提交)。感谢您在您的设备上进行测试。【参考方案2】:对于Swift 3
:
let session = AVAudioSession.sharedInstance()
if (session.responds(to: #selector(AVAudioSession.requestRecordPermission(_:))))
AVAudioSession.sharedInstance().requestRecordPermission((granted: Bool)-> Void in
if granted
Linphone.manager.callUser(username: username)
print("granted")
do
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.setActive(true)
catch
print("Couldn't set Audio session category")
else
print("not granted")
)
【讨论】:
【参考方案3】:斯威夫特 5
var session: AVAudioSession = AVAudioSession.sharedInstance()
@IBAction func btnmike(_ sender: Any)
// let session = AVAudioSession.sharedInstance()
if (session.responds(to: #selector(AVAudioSession.requestRecordPermission(_:))))
AVAudioSession.sharedInstance().requestRecordPermission((granted: Bool)-> Void in
if granted
print("granted")
do
try self.session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try self.session.setActive(true)
catch
print("Couldn't set Audio session category")
else
print("not granted")
)
【讨论】:
在 xcode 10.1 中,我不得不将session.setCategory(AVAudioSessionCategoryPlayAndRecord)
更改为 session.setCategory(.playAndRecord, mode: .default, options: [])
以上是关于AVAudioSession 斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章