iOS:idleTimerDisabled = YES仅在使用ImagePicker之前有效

时间:2014-04-30 15:00:18

标签: ios uiimagepickercontroller uiapplication

我有一个 iPad 调查工具作为内部企业应用程序。我通过在应用程序代理的[[UIApplication sharedApplication] setIdleTimerDisabled: YES];设置didFinishLaunchingWithOptions来阻止屏幕锁定。

在我使用imagePicker拍摄图像之前一切正常。之后,再次激活idleTimer。我试图在拍摄图像后禁用它,但这不起作用。

Here我发现提示在info.plist中设置所需的设备功能可能会有所帮助。但到目前为止它没有。我刚刚添加了所有相机特定标志。

有什么想法吗?

非常感谢!

马库斯

2 个答案:

答案 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];
    }];
}

我怀疑发生的事情是内部UIImagePickerControllerUIApplication.idleTimerDisabled设置为YES以防止相机睡眠。完成后(在调用委托方法之后,甚至在执行动画完成块之后),UIImagePickerControllerUIApplication.idleTimerDisabled设置回NO。相反,如果值之前为NO,则只应执行此操作。

我向Apple提交了一份错误报告。请参阅UIImageViewControllerBug示例项目。

答案 1 :(得分:1)

Jamie的解决方案看起来不错!我不是afterDelay:方法的粉丝:)

问题出现在PhotoLibrary框架中:它在从相机开始预览流之前禁用idleTimer,并在撕下它时再次启用它,而不管以前的值。

如果您有更多的冒险经历并希望解决方案在整个应用中发挥作用,那么这是一个涉及混合的问题:https://gist.github.com/zats/1a4aece697075478b44a

在显示图像选择器之前禁用或启用idleTimer的情况下进行了测试。在呈现图像选择器时,我的解决方案没有观察到idleTimerDisabled

P.S。使用听写功能时会出现同样的问题(UIDictationController中的错误) (@ jamie-mcdaniel如果您愿意更新您的错误报告,那么