AVAudioSession.requestRecordPermission未显示对话框

时间:2015-11-27 23:42:05

标签: ios ios9 avaudiosession

我正在尝试在我继承的项目中录制音频。所有以前都工作正常,直到iOS 9.现在看来requestRecordPermission调用它的块为false而不显示对话框。当我检查当前权限时,在请求它之前,我总是得到Undetermined。即使在没有重置的应用程序的后续运行中也是如此。

我正在测试实际设备,并且每次都重置权限(设置 - > general-> reset->重置位置和隐私)。 此外,我的应用程序没有显示在settings-> privacy->麦克风中,但确实显示在常规应用程序的列表中,我可以在其中看到它使用的其他权限但没有麦克风。

是否有一些可能影响它的项目设置?似乎操作系统不理解我要求权限,因此没有对话框和权限中没有列表。

代码:

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调用它的块,其值为granted = false而不显示对话框。

2 个答案:

答案 0 :(得分:8)

在“Info.plist”中设置“Bundle display name”(基本上是您的应用程序的名称)将解决问题。

答案 1 :(得分:0)

in the doc here所述,即使用户为Guitz于2015年提议的“捆绑包显示名称”设置了,一旦用户为某个应用做出决定,该值就将是静态的。

只有用户可以重置此决定:

  

提示   当用户响应您应用程序的录制权限提示时,系统会记住该选择。如果用户拒绝了录音权限,他们可以在“设置”>“隐私”>“麦克风”中重新启用它。

我已经实现了一条消息,要求用户在尝试录制时打开设置中的麦克风,并且该应用的权限被拒绝。