我有一个 iPad 调查工具作为内部企业应用程序。我通过在应用程序代理的[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
设置didFinishLaunchingWithOptions
来阻止屏幕锁定。
在我使用imagePicker
拍摄图像之前一切正常。之后,再次激活idleTimer
。我试图在拍摄图像后禁用它,但这不起作用。
Here我发现提示在info.plist中设置所需的设备功能可能会有所帮助。但到目前为止它没有。我刚刚添加了所有相机特定标志。
有什么想法吗?
非常感谢!
马库斯
答案 0 :(得分:11)
我能够像这样重置UIApplication idleTimerDisabled:
- (void)resetIdleTimerDisabled
{
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:^{
[self performSelector:@selector(resetIdleTimerDisabled) withObject:nil afterDelay:1.0];
}];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:^{
[self performSelector:@selector(resetIdleTimerDisabled) withObject:nil afterDelay:1.0];
}];
}
我怀疑发生的事情是内部UIImagePickerController
将UIApplication.idleTimerDisabled
设置为YES
以防止相机睡眠。完成后(在调用委托方法之后,甚至在执行动画完成块之后),UIImagePickerController
将UIApplication.idleTimerDisabled
设置回NO
。相反,如果值之前为NO
,则只应执行此操作。
我向Apple提交了一份错误报告。请参阅UIImageViewControllerBug示例项目。
答案 1 :(得分:1)
Jamie的解决方案看起来不错!我不是afterDelay:
方法的粉丝:)
问题出现在PhotoLibrary框架中:它在从相机开始预览流之前禁用idleTimer
,并在撕下它时再次启用它,而不管以前的值。
如果您有更多的冒险经历并希望解决方案在整个应用中发挥作用,那么这是一个涉及混合的问题:https://gist.github.com/zats/1a4aece697075478b44a
在显示图像选择器之前禁用或启用idleTimer
的情况下进行了测试。在呈现图像选择器时,我的解决方案没有观察到idleTimerDisabled
。
P.S。使用听写功能时会出现同样的问题(UIDictationController
中的错误)
(@ jamie-mcdaniel如果您愿意更新您的错误报告,那么