AVAudioSession.requestRecordPermission 不显示对话框
Posted
技术标签:
【中文标题】AVAudioSession.requestRecordPermission 不显示对话框【英文标题】:AVAudioSession.requestRecordPermission not showing dialog 【发布时间】:2015-11-27 23:42:05 【问题描述】:我正在尝试在我继承的项目中录制音频。在 ios 9 之前,一切都可以正常工作。现在 requestRecordPermission 似乎用 false 调用它的块而不显示对话框。当我检查当前权限时,在请求它之前,我总是得到未确定。即使在没有重置的情况下后续运行应用程序。
我正在实际设备上进行测试,并且每次都重置权限(设置->常规->重置->重置位置和隐私)。 此外,我的应用程序没有显示在设置->隐私->麦克风中,但确实显示在通用应用程序的列表中,在那里我可以看到它使用的其他权限,但没有麦克风。
是否有一些项目设置会影响它?似乎操作系统不理解我请求权限,因此没有对话框,也没有在权限中列出。
代码:
AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission];
switch (permissionStatus)
case AVAudioSessionRecordPermissionUndetermined:
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted)
if (granted)
NSLog(@"req granted");
else
NSLog(@"req denied");
];
break;
case AVAudioSessionRecordPermissionDenied:
NSLog(@"denied");
break;
case AVAudioSessionRecordPermissionGranted:
NSLog(@"granted");
break;
default:
break;
这在 AppDelegate.applicationDidFinishLaunchingWithOptions 中。在每次运行时(重置后的第一次以及后续的),第一次检查返回未确定,然后 requestRecordPermission 调用它的块,grant=false 而不显示对话框。
【问题讨论】:
优秀。你也可以显示日志结果吗?另外,这段代码在哪里运行? 【参考方案1】:在“Info.plist”中设置“Bundle display name”(基本上是您的应用程序的名称)将解决问题。
【讨论】:
老兄,你是怎么想出来的?太随意了。 已删除评论【参考方案2】:如 in the doc here 所述,一旦用户对应用做出决定,此值将是静态的,即使您已按照 Guitz 在 2015 年提出的建议设置了“捆绑显示名称”。
只有用户可以重置此决定:
提示 当用户响应您的应用程序的录制权限提示时,系统会记住该选择。如果用户拒绝了录音权限,他们可以在“设置”>“隐私”>“麦克风”中重新启用它。
当用户尝试录制并且应用程序的权限被拒绝时,我已经实现了一条消息,让用户在设置中打开麦克风。
【讨论】:
以上是关于AVAudioSession.requestRecordPermission 不显示对话框的主要内容,如果未能解决你的问题,请参考以下文章