如何检测在iOS上授予麦克风权限的用户?
所以问题是,在用户授予(或拒绝)使用麦克风的权限后,我需要调用一些函数 我已经看到了:如何检测在iOS上授予麦克风权限的用户?,ios,objective-c,permissions,microphone,Ios,Objective C,Permissions,Microphone,所以问题是,在用户授予(或拒绝)使用麦克风的权限后,我需要调用一些函数 我已经看到了: [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { if (granted) { // Microphone enabled code [self someFunction]; } else {
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
[self someFunction];
}
else {
// Microphone disabled code
}
}];
但是,这仅适用于检测当前状态
如果当前状态为“否”,并显示弹出窗口,且用户授予了权限,则不会调用该函数。这是因为在执行此操作时,权限为“否”,并且在下次运行代码之前,不会调用该函数
我想做的是在用户按下“允许”或“拒绝”后调用函数
有人知道怎么做吗
编辑:
忘记提及它必须是iOS 7.0以上兼容的解决方案。如果使用尚未获得您的许可,请执行以下操作:
iOS 8中引入的AVAudioSession方法是recordPermission。这将返回名为AVAudioSessionRecordPermission的枚举。您可以使用开关来确定权限警报是否已呈现给用户。通过这种方式,您只能在未向用户显示权限时调用requestRecordPermission,因此权限块可以假定它是在用户首次允许或不允许权限后执行的 例如-
AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission];
switch (permissionStatus) {
case AVAudioSessionRecordPermissionUndetermined:{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
// CALL YOUR METHOD HERE - as this assumes being called only once from user interacting with permission alert!
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
break;
}
case AVAudioSessionRecordPermissionDenied:
// direct to settings...
break;
case AVAudioSessionRecordPermissionGranted:
// mic access ok...
break;
default:
// this should not happen.. maybe throw an exception.
break;
}
我认为您无法检测自动录制权限的选择,但是,您可以创建一个计时器,每隔1秒左右检查应用程序是否有权限,如果有,计时器停止,应用程序按照预期的目的运行。我认为OP意味着他/她想要捕获iOS在您尝试访问麦克风时为您弹出的自动录制请求。我不知道OP是什么,也不知道应该从何处执行此代码。试图添加它,代码立即执行,因此无法捕获用户的响应。EOP表示“原始海报”。代码可以插入到方法中。当调用该方法时,将执行此代码。这看起来是一个很好的答案,但我忘了提到我需要iOS 7.0以上兼容的解决方案。我将投票支持这项努力的解决方案。我明白了。。。由于权限警报只向用户呈现一次,所以可能会在调用请求记录权限后考虑向NSULSDER错误写入某种标志。但是在调用之前检查标志,如果它不存在,那么您将知道它是第一次被调用的,因此您可以在权限块中做出与我的答案类似的假设。
AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission];
switch (permissionStatus) {
case AVAudioSessionRecordPermissionUndetermined:{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
// CALL YOUR METHOD HERE - as this assumes being called only once from user interacting with permission alert!
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
break;
}
case AVAudioSessionRecordPermissionDenied:
// direct to settings...
break;
case AVAudioSessionRecordPermissionGranted:
// mic access ok...
break;
default:
// this should not happen.. maybe throw an exception.
break;
}