如何检测用户在 iOS 上授予麦克风权限?
How to detect user giving microphone permission on iOS?
所以问题是我需要在用户授予(或拒绝)使用麦克风的权限后调用一些函数。
我已经看到了:
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
[self someFunction];
}
else {
// Microphone disabled code
}
}];
但是,这仅适用于检测当前状态。
如果当前状态为 "no" 并且弹出窗口显示且用户授予权限 - 将不会调用该函数。那是因为在执行这个权限的那一刻,权限是 "no" 并且直到我们 运行 代码下一次函数将不会被调用。
我想做的是在用户按下 "allow" 或 "decline" 后调用函数。
有人知道怎么做吗?
编辑:
忘了说它必须是 iOS 7.0 up 兼容解决方案。
如果使用尚未获得您的许可,请执行以下操作:
- 首先,显示弹出对话框
- 运行 你在 OP
中的代码
-
if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission)]) {
[[AVAudioSession sharedInstance] requestRecordPermission];
// Now run your function
}
AVAudioSession在iOS8中引入的一个方法是recordPermission。此 returns 一个名为 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;
}
所以问题是我需要在用户授予(或拒绝)使用麦克风的权限后调用一些函数。
我已经看到了:
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
[self someFunction];
}
else {
// Microphone disabled code
}
}];
但是,这仅适用于检测当前状态。
如果当前状态为 "no" 并且弹出窗口显示且用户授予权限 - 将不会调用该函数。那是因为在执行这个权限的那一刻,权限是 "no" 并且直到我们 运行 代码下一次函数将不会被调用。
我想做的是在用户按下 "allow" 或 "decline" 后调用函数。
有人知道怎么做吗?
编辑: 忘了说它必须是 iOS 7.0 up 兼容解决方案。
如果使用尚未获得您的许可,请执行以下操作:
- 首先,显示弹出对话框
- 运行 你在 OP 中的代码
-
if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission)]) {
[[AVAudioSession sharedInstance] requestRecordPermission];
// Now run your function
}
AVAudioSession在iOS8中引入的一个方法是recordPermission。此 returns 一个名为 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;
}