如何检测在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以上兼容的解决方案。

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

  • 首先,显示弹出对话框
  • 在OP中运行代码
  • -


    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;
    }