我遇到了与后台录制相关的意外问题(特别是当屏幕变为密码锁定时)。在摘要中,我的 AVAudioRecorder 应用程序似乎在前台,后台(切换应用程序时)和屏幕关闭时(但在激活密码锁之前)正确记录。
如果我延迟密码锁定(设置>密码>要求密码> 4小时.etc ),那么录制工作在前景/后台/应用切换/屏幕关闭时没有问题。等等,但是当录音中的密码锁定被破坏时。
我基本上使用 AVAudioRecorder 代码录制音频,并通过设置' UIBackgroundModes / audio'来遵循指南。在app.plist中设置以确保背景录制,这似乎在后台工作(即出现红色录制栏)但在通行码变为活动时失败,即用户按下电源按钮并需要输入密码才能访问设备。
我的代码设置为通过' AVAudioSessionInterruptionNotification '处理音频中断,AVAudioSession设置为' withOptions:AVAudioSessionCategoryOptionDuckOthers ',以最大限度地减少外部事件影响后台录制。
[测试程序]
密码锁定(iPhone 5 / iOS8.1>设置>密码>需要密码> 5分钟后)
[Success-CASE-1]'开始录制'持续7分钟使屏幕保持开启且应用程序有效/可见(即,在开始录制后未在后台运行)>>录制工作和按“停止录制”后,音频将被保存并可以播放。
[Success-CASE-2]'开始录制'持续7分钟保持屏幕开启和切换应用程序(即在背景中运行,屏幕主要是开启,并且在开始录制后显示红色记录条)>>录制工作和按“停止录制”后,音频将被保存并可以播放。
[故障 - 案例]'开始录制'7分钟切换屏幕关闭(即应用程序在后台运行,设备屏幕关闭)>>使用屏幕关闭7分钟后,设备在屏幕打开时需要密码。录音意外停止,变得腐败无法播放。
密码锁定(iPhone 5 / iOS8.1>设置>密码>需要密码> 15分钟后)
只有Failure-CASE和Repeat-Failure-CASE之间的区别是不需要屏幕锁定密码。
[注意]
..
希望信息有所帮助,花了很多试验和错误来达到这一点。
还有其他人遇到过这个问题吗?因为它很奇怪。
感谢
答案 0 :(得分:1)
当密码锁定时,您的音频文件(在沙盒中)可能受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];
或者,将证书中的数据保护设置为关闭。