Cocoa touch 如何检测iOS 7中拒绝的麦克风输入权限
我想检测用户何时拒绝我的iOS应用程序上的麦克风权限。 我仅在尝试录制麦克风时获得此值:-120.000000 db 但在得到这个之前,我必须建立一个音频会话。还有其他功能吗 我在输出中得到了这样的信息:Cocoa touch 如何检测iOS 7中拒绝的麦克风输入权限,cocoa-touch,ios7,Cocoa Touch,Ios7,我想检测用户何时拒绝我的iOS应用程序上的麦克风权限。 我仅在尝试录制麦克风时获得此值:-120.000000 db 但在得到这个之前,我必须建立一个音频会话。还有其他功能吗 我在输出中得到了这样的信息: 麦克风输入权限被拒绝-将只录制静音 谢谢。我不能100%肯定我们是否可以在苹果的DevForum之外谈论iOS 7 简而言之,您将在SDK中的AVAudioSession.h头文件中找到解决方案。如果您想在仍然支持iOS 6的情况下使用它,请确保使用“respondsToSelector:”来
麦克风输入权限被拒绝-将只录制静音
谢谢。我不能100%肯定我们是否可以在苹果的DevForum之外谈论iOS 7
简而言之,您将在SDK中的AVAudioSession.h头文件中找到解决方案。如果您想在仍然支持iOS 6的情况下使用它,请确保使用“
respondsToSelector:
”来检查API的可用性。请注意,这仅在使用Xcode 5构建时有效,而不使用4.6
将AVFoundation框架添加到项目中
然后从AVFoundation framework导入AVAudioSession头文件,您要在其中检查麦克风设置是否已启用
#import <AVFoundation/AVAudioSession.h>
首次运行此方法时,它将显示允许麦克风访问的提示,并根据用户的响应执行完成块。从第二次开始,它将仅根据设备上存储的设置进行操作。如果您仍然使用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工作,否则您的应用程序可能会挂起。我已经调整了上面的代码。一位客户在谢天谢地的beta版本中指出了这一点。为错误道歉。快速回答:
if AVAudioSession.sharedInstance().recordPermission() == .Denied {
print("Microphone permission refused");
}
或者您可以使用类似PermissionScope的框架,该框架允许轻松检查权限
编辑:Swift 3答案:
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
print("Microphone permission refused");
}
请注意,此方法仅适用于iOS7及以上版本:我在iPad Air上遇到了这个解决方案的问题(仅限)。你知道这种设备是否有其他配置吗?@BetoBens我还没有听说过任何特定于这种型号的东西。问题是什么?当我在iPad Air中使用内置麦克风录制到文件时,会创建该文件,但当我播放时,不会听到声音,播放也不会停止,只会在该设备上发生。太奇怪了,我修好了。在iPadAir中录制声音时,我必须从设置会话中删除AvencoderBitracteKey。我想它一定与几个麦克风有关,因为我无法选择其他麦克风来保存我的声音文件。@BenClayton我们都知道苹果喜欢在没有发布说明的情况下更改类似的内容:)
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
print("Microphone permission refused");
}