Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AVAudioSession密码锁在iOS8上停止AVAudioRecorder_Ios_Objective C_Audio Recording_Avaudiorecorder_Avaudiosession - Fatal编程技术网

AVAudioSession密码锁在iOS8上停止AVAudioRecorder

AVAudioSession密码锁在iOS8上停止AVAudioRecorder,ios,objective-c,audio-recording,avaudiorecorder,avaudiosession,Ios,Objective C,Audio Recording,Avaudiorecorder,Avaudiosession,我遇到了与后台录制相关的意外问题(特别是当屏幕被密码锁定时)。总之,我的AVAudioRecorder应用程序在前台、后台(切换应用程序时)和屏幕关闭时(但在激活通行证锁定之前)似乎都能正确录制 如果我延迟密码锁定(设置>密码>要求密码>4小时等),则在前台/后台/应用程序切换/屏幕关闭等情况下录制工作没有问题,但当密码锁定在录制中启动时,录制会损坏 我基本上是使用AVAudioRecorder代码来录制音频,并遵循指导原则,在app.plist中设置“UIBackgroundModes/aud

我遇到了与后台录制相关的意外问题(特别是当屏幕被密码锁定时)。总之,我的AVAudioRecorder应用程序在前台、后台(切换应用程序时)和屏幕关闭时(但在激活通行证锁定之前)似乎都能正确录制

如果我延迟密码锁定(设置>密码>要求密码>4小时等),则在前台/后台/应用程序切换/屏幕关闭等情况下录制工作没有问题,但当密码锁定在录制中启动时,录制会损坏

我基本上是使用AVAudioRecorder代码来录制音频,并遵循指导原则,在app.plist中设置“UIBackgroundModes/audio”以确保后台录制,这似乎在后台工作(即出现红色录制条)但当密码激活时失败,即用户按下电源按钮,需要输入密码才能访问设备

我的代码设置为通过“AVAudioSessionInterruptionNotification”处理音频中断,AVAudioSession设置为“带有选项:AVAudioSessionCategoryOptionDuckOthers”,以尽量减少影响后台录制的外部事件

[测试程序]

  • 密码锁(iPhone 5/iOS8.1>设置>密码>需要密码>5分钟后)

  • [Success-CASE-1]“开始录制”7分钟,保持屏幕打开,应用程序处于活动/可见状态(即开始录制后不在后台运行)>>录制工作,按“停止录制”后,音频保存并可播放

  • [Success-CASE-2]“开始录制”7分钟,保持屏幕打开并切换应用程序(即在后台运行,屏幕大部分打开,录制开始后显示红色录制条)>>录制工作,按“停止录制”后,音频保存并可播放

  • [故障案例]“开始录制”7分钟,关闭屏幕(即应用程序在后台运行,设备屏幕关闭)>>关闭屏幕7分钟后,当屏幕打开时,设备需要密码。录制意外停止,已损坏,无法播放

  • 密码锁(iPhone 5/iOS8.1>设置>密码>需要密码>15分钟后)

  • [调整密码锁后重复故障情况]“开始录制”7分钟关闭屏幕(即应用程序在后台运行,设备屏幕关闭)>>关闭屏幕7分钟后,设备打开(这次不需要密码锁)。录音是好的,工作完美,可以播放
故障案例和重复故障案例之间的唯一区别是不需要屏幕锁定密码

[Notes]

  • 在iPhone4/5/6和iPadMini2(iOS8.1)上使用XCode 6.1进行测试,但存在相同问题
  • 代码是标准AVAudioRecorder代码,AVAudioSession设置类似于:
  • 希望这些信息能有所帮助,经过了大量的尝试和错误才达到这一点

    还有其他人经历过这个问题吗?因为这很奇怪


    谢谢

    密码锁定时,您的音频文件(沙盒中)可能受iOS保护; 如果屏幕未设置密码而被锁定,则一切正常

    请尝试以下方法:

            NSDictionary *oldAttr = [[NSFileManager defaultManager]attributesOfItemAtPath:localFilePath error:nil];
            NSMutableDictionary *newAttr = nil;
            if (oldAttr){
                newAttr = [[NSMutableDictionary alloc]initWithDictionary:oldAttr];
            }else{
                newAttr = [[NSMutableDictionary alloc]init];
            }
            [newAttr setObject:NSFileProtectionNone forKey:NSFileProtectionKey];
            [[NSFileManager defaultManager] setAttributes:newAttr
                                             ofItemAtPath:localFilePath
                                                    error:nil];
    

    或者,将证书中的数据保护设置为关闭。

    Man u救了我的命。。。。感谢您的支持,我们已经搜索了一段时间,以查找此问题的原因!苹果似乎一天比一天更糟糕,甚至没有一条日志消息来描述问题是什么!