iOS IPA运行时如何防止屏幕熄灭?代码无效求排查
解决Xamarin.iOS中设置屏幕常亮无效的问题
嘿,我来帮你搞定这个屏幕常亮的问题!你用UIApplication.SharedApplication.IdleTimerDisabled = true的思路完全正确,但可能忽略了两个关键细节,导致设置没生效。
可能的原因
- 后台切换后的状态重置:当应用进入后台再回到前台时,iOS系统可能会自动重置
IdleTimerDisabled的状态,把它改回false。 - 代码执行顺序或第三方库干扰:比如初始化ZXing库、加载Forms应用后,某些内部逻辑可能偷偷修改了这个设置;另外,把设置放在
base.FinishedLaunching之前,也可能被系统默认行为覆盖。
解决方案及修正代码
我给你调整后的完整代码,同时补上后台切回时的重置逻辑:
using UIKit; using Xamarin.Forms; using ZXing.Net.Mobile.Forms.iOS; namespace YourAppNamespace.iOS { [Register("AppDelegate")] public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate { private App formsApp; public override bool FinishedLaunching(UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init(); ZXingNetMobileFormsiOSPlatform.Init(); formsApp = new App(); LoadApplication(formsApp); // 把屏幕常亮设置放在LoadApplication之后,确保Forms初始化完成后生效 UIApplication.SharedApplication.IdleTimerDisabled = true; return base.FinishedLaunching(app, options); } // 关键:当应用从后台回到前台时,重新开启屏幕常亮,防止系统重置 public override void WillEnterForeground(UIApplication application) { base.WillEnterForeground(application); UIApplication.SharedApplication.IdleTimerDisabled = true; } } }
额外检查点
- 排查项目其他代码:如果应用里有扫码完成后的逻辑,或者使用的ZXing版本存在修改
IdleTimerDisabled的情况,需要在对应操作完成后手动再设置一次true。 - 设备设置排查:虽然概率很低,但可以检查设备的「设置-显示与亮度-自动锁定」,确认没有被MDM或系统强制限制(不过
IdleTimerDisabled通常会覆盖这个系统设置)。
修改后重新部署应用,测试正常运行和后台切回的场景,应该就能让屏幕保持常亮啦!
内容的提问来源于stack exchange,提问作者A.Goutam
相关产品推荐
相关产品推荐

