在调用相机后idleTimerDisabled失效的问题

相关资料:

问题

  • 前几天有人在群里边说,设置idleTimerDisabled=YES后,在使用相机后不会阻止锁屏(很好奇怎么回事)。

解决

  • 1、完全不了解情况,先试了一下(代码来源):

      - (void)viewDidLoad
    {
    [super viewDidLoad]; self.button = [UIButton buttonWithType:UIButtonTypeSystem];
    [self.button setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.button setTitle:@"Show ImagePicker" forState:UIControlStateNormal];
    [self.button addTarget:self action:@selector(buttonTouchHandler:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.button];
    [self.view setNeedsUpdateConstraints];
    } - (void)buttonTouchHandler:(UIButton *)button
    {
    [self logIdleTimerDisabled];
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    imagePickerController.delegate = self;
    [self presentViewController:imagePickerController animated:YES completion:nil];
    } - (void)updateViewConstraints
    {
    [super updateViewConstraints]; if (self.viewConstraints)
    {
    [self.view removeConstraints:self.viewConstraints];
    } NSMutableDictionary *views = [@{ @"button": self.button} mutableCopy];
    NSMutableArray *constraints = [NSMutableArray array];
    [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[button]-20-|" options:0 metrics:nil views:views]];
    [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[button]-|" options:0 metrics:nil views:views]]; self.viewConstraints = [constraints copy];
    [self.view addConstraints:self.viewConstraints];
    } - (void)logIdleTimerDisabled
    {
    BOOL idleTimerDisabled = [UIApplication sharedApplication].idleTimerDisabled;
    NSLog(@"idleTimerDisabled = %d", idleTimerDisabled);
    } #pragma mark - UIImagePickerControllerDelegate
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    [self logIdleTimerDisabled];
    [self dismissViewControllerAnimated:YES completion:^{
    [self logIdleTimerDisabled];
    }];
    } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
    [self logIdleTimerDisabled];
    [self dismissViewControllerAnimated:YES completion:^{
    [self logIdleTimerDisabled];
    }];
    }

    注:Appdelegate中已近设置idleTimerDisabled为YES,Xcode会阻止设备休眠。

    Log:

      2017-03-23 13:22:25.594 UIImagePickerControllerBug[30239:3267578] idleTimerDisabled = 1
    2017-03-23 13:22:28.476 UIImagePickerControllerBug[30239:3267578] Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
    2017-03-23 13:22:32.312 UIImagePickerControllerBug[30239:3267578] idleTimerDisabled = 1
    2017-03-23 13:22:32.846 UIImagePickerControllerBug[30239:3267578] idleTimerDisabled = 0
  • 2、上边的『代码来源』原文中有作者的一些猜测:

      I have attached a simplified Xcode project to demonstrate the bug.
    
      	1. Run UIImagePickerControllerBug on a device not connected to Xcode (because Xcode always keeps the device from sleeping).
    2. Observe that the app does not fall asleep.
    3. Press the Show ImagePicker Button.
    4. Take a photo or just press cancel
    5. Observe that the app will now fall asleep.
  • 3、在『stackoverflow.com』查找的时候,发现其中有人在很早以前就提出了这个问题(由于是前些天的事情有些链接找不到了),不知道是出于什么原因官方一直没有解决。

解决

  • 解决办法就是相机的完成或者取消代理中延时设置,详见:

      - (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];
    }];
    }

备注

  • Xcode会阻止设备休眠。

在调用相机后idleTimerDisabled失效的问题的更多相关文章

  1. ios 调用相机后 view 下沉问题

    我只加了一句代码 现在不报错了  因为这个问题是随机性的  我也不太明白这个地方是怎么回事   我只是这样子做了  问题不出来了 if ([[[UIDevice currentDevice] syst ...

  2. swift调用相机和相册

    简单实现swift调用相机和相册的功能,分享代码与学习swift的童鞋共同进步 import UIKit class ViewController: UIViewController,UIImageP ...

  3. iOS-iOS调用相机调用相册【将图片保存到本地相册】

    设置头部代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 1.调用相机 检测前置摄像头是否可用 - ...

  4. Android调用相机拍摄照片并显示到 ImageView控件中

    在前面的一篇文章中曾介绍过简单的开启相机照相功能,详见 Android简单调用相机Camera功能,实现打开照相功能 ,这一次就会将前面拍摄的照片显示到ImageView中,形成一个完整的效果 看实例 ...

  5. Android 调用相机、相册功能

    清单文件中增加对应权限,动态申请权限(此部分请参考Android 动态申请权限,在此不作为重点描述) private static final int REQUEST_CODE_ALBUM = 100 ...

  6. Android开发在Activity外申请权限调用相机打开相册

    问题描述: 最近在项目中遇到一个需要调用相册和打开相机的需求,但是,在Android 6.0以后,调用相册属于危险权限,需要开发者动态获取,这就意味着我们申请权限是与Activity绑定的,但如果一个 ...

  7. 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效

    最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...

  8. Xcode升后插件失效

    Xcode升后插件失效,与添加插件不小心点击Skip Bundle解决办法 字数267 阅读4731 评论1 喜欢12 今天升级了xcode到6.4 发现之前装的插件不能使用了.这里有一个解决的方案: ...

  9. 更新xcode后插件失效问题——不针对特定版本的通用解决方法

    一.Xcode更新后插件失效的原理 1.每次更新Xcode后插件都会失效,其实插件都还在这个目录好好的躺着呢: ~/Library/Application Support/Developer/Shar ...

随机推荐

  1. Python用类实现串以及对串的方法进行单元测试

    串是一种常见的数据结构,这里使用Python定义类来实现相应的方法.先看代码,再对相关知识进行讲解. # coding=utf-8 __all__=['ADTString'] class ADTStr ...

  2. Codeforces 708A Letters Cyclic Shift

    A. Letters Cyclic Shift time limit per test:1 second memory limit per test:256 megabytes input:stand ...

  3. MVC分页控件

    1.下载MvcPager.dll文件并引用到MVC项目中 2.在控制器中引用命名空间using Webdiyer.WebControls.Mvc; 3.获取数据集合,数据的总记录数(数据集合有多少条数 ...

  4. ajax提交File文件

    <script type="text/javascript">    $(function() {        $("input[name='image'] ...

  5. JVM内存

    大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack( ...

  6. Java集合框架之三:HashMap源码解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! HashMap在我们的工作中应用的非常广泛,在工作面试中也经常会被问到,对于这样一个重要的集合模型我们有必要弄清楚它的使用方法和它底层的实 ...

  7. EFcore与动态模型

    在开发商城系统的时候,大家会遇到这样的需求,商城系统里支持多种商品类型,比如衣服,手机,首饰等,每一种产品类型都有自己独有的参数信息,比如衣服有颜色,首饰有材质等,大家可以上淘宝看一下就明白了.现在的 ...

  8. 发布自己的Angular2库初探

    从去年年底开始使用ng2,遇到并解决或被虐了一些问题点,对其各种新特性与开发模式感觉还算舒服.还有的一个感想就是,要使用ng2还得先学习不少其他东西,比如TypeScript语法,比如ES6新特性,还 ...

  9. Lucas,.net Web框架

    #LucasLucasLucasWeb框架是基于新的魔法糖思想创建的框架.本框架有两大特点.1.所有框架里最简单易学易配置的.2.所有框架里效率最快的.1.UrlRouter没有使用IOC注入及反射, ...

  10. git如何解决冲突(代码托管在coding)

    分支A提交合并请求到分支B,有冲突 git fetch code 拉取远程仓库的其他分支代码(我拉代码是remote add code所以这里是code,可以用git remote查看) git ch ...