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

2023-11-25

所以问题是,在用户授予(或拒绝)使用麦克风的权限后,我需要调用一些函数。

我已经看到了这个:

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

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

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

如果当前状态为“否”并且弹出窗口显示并且用户授予权限 - 该函数将不会被调用。这是因为在执行此操作时,权限为“否”,并且直到我们下次运行代码为止,该函数都不会被调用。

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

有人知道该怎么做吗?

编辑: 忘了说它必须是 iOS 7.0 以上的兼容解决方案。


一种方法AVA音频会话iOS 8 中引入的是记录权限。这将返回一个名为的枚举AVAudioSessionRecordPermission。您可以使用开关来确定是否已向用户显示权限警报。这样你只需调用请求记录权限当它尚未呈现给用户时,因此权限块可以假设它正在用户第一次允许或不允许权限之后执行。

一个例子是这样的 -

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 上检测用户授予麦克风权限? 的相关文章

  • FB SDK 3.0 我是否需要扩展访问令牌还是自动的?

    基于http developers facebook com roadmap offline access removal http developers facebook com roadmap offline access remova
  • C / Objective C 中的 switch 语句

    我是 Objective C 的新手 但根据我对 switch 语句的了解 以下代码不应该打印任何内容 因为对我来说 似乎应该存在编译错误 但是打印了 2 我不懂为什么 有人可以解释一下吗 void test int myVar 2 swi
  • 尝试使用 Xcode 的新 UI 测试运行多个测试失败

    当我尝试在新的 Xcode beta 中同时运行多个 UI 测试时 它在第一次测试后失败 并在第一次测试后的每个测试中出现错误 UI 测试失败 应用程序状态仍未终止 有人解决这个问题了吗 我也遇到过同样的问题 看来 至少就我而言 应用程序从
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • RestKit:如何删除核心数据条目以保持内容与服务器同步?

    我正在使用 RestKit RKObjectManager 从我的服务器获取数据并将其存储在核心数据中 请参阅我的其他post https stackoverflow com questions 17066214 restkit how t
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • 获取UIButton的UITableViewCell?

    我正在尝试使用UIButton 它位于自定义的UITableViewCell类称为GFHomeCell The GFHomeCell has a postID属性 我想在准备继续时发送该属性 我设置了一个在按下按钮时运行的方法 但是 在按下
  • 有没有办法以编程方式选择 Segue 锚点?

    假设我有一个 Storyboard 其中包含一个包含按钮的视图 当用户按下此按钮时 会出现一个弹出窗口 因此 我需要使用 Xcode 将 Segue 拖动到按钮来设置锚点 然后执行使用标识符执行Segue 所以 我的问题是 有没有办法以编程
  • 纠正mysql创建用户时语法错误

    所以我很常见ERROR 1045 28000 Access denied for user root localhost using password YES mysql错误 我已经尝试了论坛上的所有典型修复 通过 mysql safe 方
  • 我可以在滚动时固定表格的 tableHeaderView 位置吗?

    我有一个表视图 并在其 tableHeaderView 上附加了一个 UISegmentedControl 如何使 tableHeaderView 固定 以便即使在滚动表视图时也始终可以在同一位置查看 UISegmentedControl
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • 如何更改某些功能以兼容 iOS 10 或更低版本的 Snapchat 中的某些功能,例如相机视图控制器

    我正在制作一个视图控制器来制作像 snapchat 相机一样的相机视图控制器 我下面的代码在 iOS 11 或更高版本上完美运行 老实说 我并没有真正掌握我的代码 因为我只是按照这个像相机视图控制器这样的 snapchat 的教程进行操作
  • NSNotification 与dispatch_get_main_queue

    和 关联这个问题 https stackoverflow com questions 7905192 iphone grand central dispatch main thread我想知道关于何时使用 NSNotification 在主
  • iOS TestFlight - 外部测试人员未收到新版本通知

    我已经向外部 TestFlight 用户提供了一个应用程序 他们已收到电子邮件并按预期安装了应用程序 他们有版本 1 0 Build 1 不过 我现在已经上传了一个新版本 版本 1 0 版本 2 这已获得批准 在外部测试页面中 我添加并选择
  • 如何在调用-reloadData后保留UITableView contentoffset

    CGPoint offset table contentOffset table reloadData table setContentOffset offset animated NO unuseful block UITableView
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • Base64Transcoder.m 重复符号

    我想使用 SKPSMTPMessage 库 唯一的问题是这个库包含文件 Base64Transcoder m 由于我有 Dropbox SDK 该文件会出现重复错误 我该如何解决这个错误 我不能直接删除 Base64Transcoder m
  • 播放声音无延迟 iOS

    我找不到如何以低延迟播放真实声音的方法 我尝试使用 AVFoundation 音频播放器 巨大的延迟大约 500 毫秒 所以我尝试创建系统声音 如果运气不好 延迟大约为 200 毫秒 虽然不多 但对我来说没有用 我最多需要 50 毫秒 确保
  • 如何在 Safari 和 Native App 之间共享上下文?

    我有需要通过 Safari 设置一些上下文 上下文标记 然后从本机 iOS 应用程序读取该上下文 这样做的最佳实践是什么 到目前为止的一些想法 在 HTML 5 数据库中设置上下文 但我不确定这是否有效 因为该数据库可能只能从 Safari
  • Expo eas-cli iOS 构建失败

    我已经使用 React Native 创建了一个应用程序 并尝试通过 Expo 的 eas cli 创建一个 iOS 应用程序商店 跑步时eas build platform ios the Fastlane build failed wi

随机推荐

  • Python:以 Value 作为字典获取前 n 个键

    我有一本字典 比如 data sachin score 15000 out 100 Dhoni score 8000 out 80 Shewag score 12000 out 150 我想要两名得分最高的球员 所以我尝试过 key key
  • 将工具提示与 link_to 结合使用 (Ruby on Rails 3.2.3)

    我已经成功使用类似于以下的代码创建了文本工具提示 a href title something text on page a 不过 我想使用 link to 命令为菜单中定义的链接提供工具提示 我已经包含了我希望出现工具提示的声明 li i
  • Perl 脚本可以修改自身吗?

    我想让我的脚本在内部跟踪最后一次修订日期作为评论 这可能吗 在我看来 它需要获取日期 然后打开其脚本文件进行追加 写入数据并保存文件 谢谢 Everone 非常好的答案 根据 GreenMatt 留下的代码片段 我将其放在一起 usr bi
  • 为 UIView 及其所有子视图着色

    有什么方法可以给 UIView 着色吗 不是背景颜色 而是整个 UIView 及其所有子视图 例如 带有星星旋转动画的 UIView 即 UIView 形状不断变化 最终我创建了一个 UIView 类别 可以对 UIView 进行着色 没有
  • Laravel 本地化以及来自 Jetstream / Fortify 的路线

    我有一个新的 Laravel 项目要处理 我们希望以多种语言提供它 我从 JetStream 开始了这个项目 身份验证等路由由 JetStream Fortify 自动处理 然后我添加了https github com mcamara la
  • 如何构建和使用 Google TensorFlow C++ api

    我真的很渴望开始在 C 中使用 Google 新的 Tensorflow 库 网站和文档对于如何构建项目的 C API 确实不清楚 我不知道从哪里开始 有更多经验的人可以通过发现和分享使用 TensorFlow 的 C API 的指南来提供
  • HoughCircles 无法检测到该图像上的圆圈

    我试图检测图像中包含圆点的圆圈 但不幸的是我无法这样做 我正在使用 opencv 霍夫变换 但找不到使其工作的参数 src imread encoded jpg 1 Convert it to gray cvtColor src src g
  • Wget:如果文件已存在,则跳过下载?

    答复如果 wget 中存在文件 则跳过下载 说使用 nc or no clobber but nc不会阻止发送 HTTP 请求以及随后下载文件 如果文件已被完全检索 则下载文件后它不会执行任何操作 如果文件已经存在 是否有办法阻止发出 HT
  • 如何获取 SSAS(或任何其他报告)中两个 TFS 工作项状态之间的时间?

    TFS 的报告中是否有一种方法可以获取工作项在状态之间转换所需的时间 查看中的数据Tfs Warehouse数据库我可以看到有一个工作项的每个修订的记录 并且使用 TSQL 我可以编写一个查询来获取ChangedDate每个状态的变化并区分
  • AngularJS 模块依赖关系 - 澄清?

    我一直在研究 AngularJs 网站上的教程示例 this one The 主要 html 很空 除了ng view and ng app phonecatApp The app js文件包括 var phonecatApp angula
  • GDI+ .NET:宽度超过 202 像素的 LinearGradientBrush 会导致颜色环绕

    如果我用 a 绘制一个宽度超过 202 像素的矩形LinearGradientBrush 我在左侧看到一条彩色条纹 给定一个代码202px宽矩形 private void MainForm Paint object sender Paint
  • 如何在 Windows 中调试(逐行)Rcpp 生成的代码?

    我正在尝试调试Rcpp运行时编译的代码 很长一段时间以来 我一直试图让它发挥作用 但没有成功 这里提出了一个非常相似的问题 Windows下Rcpp生成的DLL的调试 逐行 它问了同样的问题 但问题和答案都远远超出了我的理解 这是我所拥有的
  • 在不启动 MSWord 的情况下读取 .doc 文件

    我正在尝试打开 doc 文件并读取其内容 但我找不到任何方法可以在不启动 MSWord 的情况下执行此操作 现在我有以下代码 Microsoft Office Interop Word Application app new Microso
  • 连接到 Firebase 的服务是一个坏主意吗?

    我正在构建一个需要实时更新的 Android 应用程序 我的服务器是 Firebase Firebase 旨在当用户连接到服务器时接收其更新的数据 到目前为止 Firebase 给我留下了深刻的印象 但我担心的是当应用程序不活动时接收新数据
  • C 中的整数四舍五入到最接近的十或百

    我正在尝试在 C 中考虑一个满足以下条件的函数 它接受大于 0 的整数作为参数 它将该整数向上舍入到最接近的值 以便只有第一个 数字不为零 例如 53 结果是 60 197 变成 200 4937 结果为 5000 有没有办法做到这一点 以
  • 如何将 FontAwesome 5 Pro 与 React 集成?

    有人可以建议我如何集成 FontAwesome 5Pro与反应 我知道有包 fortawesome react fontawesome 例如 fortawesome fontawesome free regular 但有没有办法包含专业版图
  • QSignalMapper 和原始的 Sender()

    我有一堆QComboBoxes 在表中 为了知道哪一个被触发 我重新映射信号以对表格单元格位置进行编码 如中所述在 QTableWidget 中选择 QComboBox 为什么 Qt 不首先发送单元格激活信号 这样您就可以使用与我不知道的任
  • 使用 R 中两个数据帧的匹配 ID 填充列

    我有两个数据框 df1 df2 我想填写从 df1 到 df2 的 AGE 和 SEX 值 条件是两者之间具有相同的 ID 我尝试了几种使用 for 循环并检查两个数据帧之间的主题 ID 匹配的方法 但失败了 结果应与 df3 中的结果相同
  • JavaScript 排序比较器函数

    基本上我想构建一个函数 通过对象的属性 成员变量之一对数组中的对象进行排序 我非常确定比较器函数是隐藏错误的地方 但我不是 100 确定 调用排序函数后我应该得到的输出是1 2 3 I get 1 3 2这意味着它没有改变 这是整个js代码
  • 如何在 iOS 上检测用户授予麦克风权限?

    所以问题是 在用户授予 或拒绝 使用麦克风的权限后 我需要调用一些函数 我已经看到了这个 AVAudioSession sharedInstance requestRecordPermission BOOL granted if grant