我希望能够检测到用户在我的iOS应用程序上拒绝麦克风权限。 只有在尝试录制麦克风时,我才能获得此值:-120.000000 db
但是,在获取这个值之前,我必须设置一个AVAudioSession。是否有另外的函数可以使用?
并且我在输出中得到了这条消息:
Microphone input permission refused - will record only silence
谢谢。
我希望能够检测到用户在我的iOS应用程序上拒绝麦克风权限。 只有在尝试录制麦克风时,我才能获得此值:-120.000000 db
但是,在获取这个值之前,我必须设置一个AVAudioSession。是否有另外的函数可以使用?
并且我在输出中得到了这条消息:
Microphone input permission refused - will record only silence
谢谢。
如果你仍在使用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工作,否则您的应用程序可能会崩溃。我已经调整了上面的代码。客户在幸运的测试版中指出了这一点。对于错误表示歉意。
#import <AVFoundation/AVAudioSession.h>
然后只需调用此方法
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
第一次运行该方法时,它将显示提示允许麦克风访问,并根据用户的响应执行完成块。从第二次开始,它将仅基于设备上存储的设置执行操作。
快速回答:
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");
}
我不确定我们是否可以在苹果的开发者论坛之外讨论iOS 7,但我在那里找到了你要找的答案。
简而言之,在SDK中的AVAudioSession.h头文件中,您会找到解决方案。如果您想在仍支持iOS 6的情况下使用它,请务必使用“respondsToSelector:
”来检查API的可用性。