美文网首页
有关UIDevice获取电量坑

有关UIDevice获取电量坑

作者: Wakeen96 | 来源:发表于2017-08-20 11:49 被阅读0次

    由于要通过电量为用户开启不同使用模式,所以需要获取手机的电量来检测电量的变化。

    [UIDevice currentDevice].batteryLevel
    

    这是系统给出的电量获取方法,在获取之前首先要把batteryMonitoring设置为YES,但是在实际操作中,发现电量在第一次获取之后,再获取都是定值,一开始以为是方法问题,在网上分别着了几种获取电量的方法,包括

    • 1.batteryLevel
    • 2.通过私有API获取Statusbar的电量值
    • 3.通过引入IOKit framework来获取

    实际使用中2获取的电量址并不准确,而且由于使用了私有API,在审核过程中有被拒风险,所以直接舍弃了。
    第三种由于引入了framework,增加了包大小,不划算,也舍弃了。后来开始查找为什么会获取一次之后都是定值,通过runtime的一些列表检查了ivarmethod的地址,通过demo对比发现是一样的,所以方法并没有被其他人hook,检查调用线程,发现第一次设置在子线程,于是在launch中设置了YES,通过一系列的尝试,发现以下结论:

    • 1.batteryMonitoring设置的时候必须在主线程,否则之后获取电量以及电池状态,都是第一次获取的状态
    • 2.batteryMonitoring重复设置多次相同值的时候,会被屏蔽掉,只会保留第一次的设置,可能在setter方法里做了优化,判断值是否和之前的相同直接return

    相关文章

      网友评论

          本文标题:有关UIDevice获取电量坑

          本文链接:https://www.haomeiwen.com/subject/itkfdxtx.html