我想检测用户何时拒绝iOS应用程序上的麦克风权限。 我在尝试录制麦克风时只获得此值:-120.000000 db
但在此之前我必须设置一个AVAudioSession。还有其他功能吗?
我在输出中收到了这条消息:
Microphone input permission refused - will record only silence
感谢。
答案 0 :(得分: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];
});
}
}];
}
编辑:事实证明,withObject块是在后台线程中执行的,所以不要在那里做任何UI工作,否则你的应用可能会挂起。我已经调整了上面的代码。一位客户指出了这一点,感谢测试版。为错误道歉。
答案 1 :(得分:42)
请注意,这仅适用于使用Xcode 5而不是4.6
构建的情况将AVFoundation Framework添加到您的项目中
然后从AVFoundation框架导入AVAudioSession头文件,您要在其中检查麦克风设置是否已启用
#import <AVFoundation/AVAudioSession.h>
然后简单地调用此方法
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
第一次运行此方法时,它将显示允许麦克风访问的提示,并根据用户响应执行完成块。从第二次开始,它将根据设备上存储的设置进行操作。
答案 2 :(得分:2)
快速回答:
if AVAudioSession.sharedInstance().recordPermission() == .Denied {
print("Microphone permission refused");
}
或者您可以使用PermissionScope等框架来轻松检查权限。 https://github.com/nickoneill/PermissionScope
编辑:Swift 3回答:
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
print("Microphone permission refused");
}
答案 3 :(得分:1)
如果我们被允许在Apple的devforums but I found the answer you're looking for there之外谈论iOS 7,我不是百分之百确定。
简而言之,您将在SDK中的AVAudioSession.h头文件中找到您的解决方案。如果您想在仍支持iOS 6的同时使用它,请确保使用“respondsToSelector:
”来检查API的可用性。