我想检测用户何时拒绝我的 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 工作,否则你的应用程序可能会挂起。我已经调整了上面的代码。一位客户在值得庆幸的是测试版中指出了这一点。为错误道歉。
请注意,这仅适用于使用 Xcode 5 而不是 4.6 构建的
将 AVFoundation 框架添加到您的项目中
然后从 AVFoundation 框架中导入 AVAudioSession 头文件,您打算在其中检查麦克风设置是否启用
#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
编辑:斯威夫特 3 答案:
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
print("Microphone permission refused");
}
我不能 100% 确定我们是否被允许在 Apple 的开发论坛之外谈论 iOS 7,但我在那里找到了您正在寻找的答案。
简而言之,您将在 SDK 的 AVAudioSession.h 头文件中找到您的解决方案。如果您想在仍然支持 iOS 6 的同时使用它,请务必使用 " respondsToSelector:
" 检查 API 可用性。