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 不显示对话框的主要内容,如果未能解决你的问题,请参考以下文章