我想检测用户何时拒绝我的iOS应用程序上的麦克风权限.我在尝试录制麦克风时只获得此值:-120.000000 db
但在此之前我必须设置一个AVAudioSession.还有其他功能吗?
我在输出中得到了这条消息:
Microphone input permission refused - will record only silence
谢谢.
Ben*_*ton 51
如果您仍在使用iOS SDK 6.0进行编译(就像我一样),您必须比@Luis E. Prado更加间接,因为requestRecordPermission方法不存在.
这就是我做到的.如果您使用ARC,请删除自动释放位.在iOS6上没有任何反应,在iOS7上会记录"麦克风已启用"消息或弹出警报.
AVAudioSession *session = [AVAudioSession sharedInstance];
if ([session respondsToSelector:@selector(requestRecordPermission:)]) {
[session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted) {
// Microphone enabled code
NSLog(@"Microphone is enabled..");
}
else {
// Microphone disabled code
NSLog(@"Microphone is disabled..");
// We're in a background thread here, so jump to main thread to do UI work.
dispatch_async(dispatch_get_main_queue(), ^{
[[[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied"
message:@"This app requires access to your device's Microphone.\n\nPlease enable Microphone access for this app in Settings / Privacy / Microphone"
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil] autorelease] show];
});
}
}];
}
Run Code Online (Sandbox Code Playgroud)
编辑:事实证明,withObject块是在后台线程中执行的,所以不要在那里做任何UI工作,否则你的应用程序可能会挂起.我已经调整了上面的代码.一位客户指出了这一点,感谢测试版.为这个错误道歉.
Lui*_*ado 42
请注意,这仅适用于使用Xcode 5构建,而不适用于4.6
将AVFoundation Framework添加到您的项目中
然后从AVFoundation框架导入AVAudioSession头文件,您要在其中检查麦克风设置是否已启用
#import <AVFoundation/AVAudioSession.h>
Run Code Online (Sandbox Code Playgroud)
然后简单地调用此方法
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
Run Code Online (Sandbox Code Playgroud)
第一次运行此方法时,它将显示允许麦克风访问的提示,并根据用户响应执行完成块.从第二次开始,它将根据设备上存储的设置进行操作.
我不能 100% 确定我们是否可以在 Apple 开发者论坛之外讨论 iOS 7,但我在那里找到了您正在寻找的答案。
简而言之,您可以在 SDK 的 AVAudioSession.h 头文件中找到解决方案。如果您想在仍然支持 iOS 6 的同时使用它,请务必使用“ respondsToSelector:”来检查 API 可用性。
| 归档时间: |
|
| 查看次数: |
22481 次 |
| 最近记录: |