如何检测用户在iOS上授予麦克风权限?

时间:2015-10-11 12:49:47

标签: ios objective-c permissions microphone

所以我需要在用户给出(或拒绝)使用麦克风的权限后调用某个函数。

我已经看到了这个:

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
            [self someFunction];

        }
        else {
            // Microphone disabled code
        }
 }];

但是,这仅用于检测当前状态。

如果当前状态是"否"和弹出窗口显示和用户授予权限 - 不会调用该函数。那是因为在执行此权限的那一刻,许可是" no"直到我们下次运行代码时才会调用该函数。

我想要做的是在用户按下"允许"之后调用一个函数。或者"拒绝"。

任何人都知道如何做到这一点?

编辑: 忘记提到它必须是iOS 7.0兼容的解决方案。

2 个答案:

答案 0 :(得分:11)

iOS 8中引入的 AVAudioSession 方法是 recordPermission 。这将返回名为 AVAudioSessionRecordPermission 的枚举。您可以使用开关来确定是否已向用户显示权限警报。这样,只有在未向用户显示 requestRecordPermission 时才会调用 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 :(得分:0)

如果使用尚未获得您的许可,请执行以下操作:

  1. 首先,显示弹出对话
  2. 在OP中运行您的代码
  3. -

    {{1}}