能否重写UIDeviceBatteryState变量?能否修改该变量禁用设备充电?
解答:无法通过修改
UIDeviceBatteryState来禁用设备充电 嘿,这个问题问得挺有意思!不过直接给你结论:不行,你没办法重写或者修改UIDevice.current.batteryState这个属性来改变设备实际的充电状态,更没法用这种方式禁用充电。原因主要有这几点:
这是系统只读属性:
UIDevice的batteryState本身就是只读的(声明是var batteryState: UIDeviceBatteryState { get }),它的值是iOS系统根据硬件检测到的真实充电情况实时更新的,第三方App完全没有权限去修改这个系统维护的状态值。沙箱与硬件权限限制:iOS的App运行在严格的沙箱环境里,只能访问自己沙箱内的资源和系统开放的有限API,根本碰不到硬件层面的充电控制逻辑。充电是由系统底层和硬件模块直接交互管理的,普通App连干预的权限都没有。
篡改状态≠改变实际行为:退一步说,就算你用一些黑科技(比如Method Swizzling)让
batteryState返回.unplugged(实际是充电状态),那也只是骗了你自己的App,设备该充电还是会充电,因为底层的硬件逻辑根本没被改变。而且这种手段还违反App Store审核规则,大概率过不了审。
如果你的需求是想控制设备不充电,目前iOS没有开放给第三方App这样的API。唯一可能相关的是企业级设备通过MDM(移动设备管理)配置,但那是面向企业管理的场景,普通第三方App做不到。
内容的提问来源于stack exchange,提问作者Alex Broere
相关产品推荐
相关产品推荐

