代码设置屏幕常亮:
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
一句代码搞定!
补充:
APP某个版本上线后有司机反馈应用升级后如果不操作APP,屏幕不久就会息屏。对于司机来说在行驶过程中黑屏或者驾驶中操作手机都是一种危险行为,而技术人员也没办法通知所有的用户在设置-显示与亮度-自动锁定
选择永不
,所以直接在代码层面解决该问题才是王道(被动等待司机反馈,不如主动出击)。
经网上查询得知在调用系统拍照结束时系统会将idleTimerDisabled
属性设置为NO
(也有文章介绍在使用AVPlayer播放结束后该属性也会被设置为NO
,然而经过在iOS13.3系统的iPhone XS Max上测试发现属性值并未改变)。受此启发,可能新版本中某功能也会存在类似设置。
解决方法:监听idleTimerDisabled
属性,当值被设置为NO
时,将idleTimerDisabled
属性值修改为YES
。同时不要忘记在合适的地方移除监听。
代码如下:
- (void)keepIdleTimerDisabled {
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
[[UIApplication sharedApplication] addObserver:self forKeyPath:@"idleTimerDisabled" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if (![UIApplication sharedApplication].idleTimerDisabled) {
[UIApplication sharedApplication].idleTimerDisabled = YES;
}
}
- (void)dealloc{
[[UIApplication sharedApplication] removeObserver:self forKeyPath:@"idleTimerDisabled"];
[UIApplication sharedApplication].idleTimerDisabled = NO;
}