美文网首页程序员
iOS 获取系统剩余电量

iOS 获取系统剩余电量

作者: 陈盼同学 | 来源:发表于2019-05-27 17:14 被阅读8次

    当我们想解决iOS耗电问题时,首先要能获取到系统电量才能更好地去解决的问题。下面开始介绍。
    在 iOS 中,IOKit framework 是专门用于跟硬件或内核服务通信的。所以,我们可以通过 IOKit framework 来获取硬件信息,进而获取到电量消耗信息。

    第一步

    导入 IOKit.framework,但是目前 IOKit.framework库只存在Mac下,所以要自己新建一个mac项目,然后从那个项目导入,再拷到iOS项目中

    第二步

    把IOKit.framework里面的IOPowerSources.h和IOPSKeys.h拷贝到你的iOS项目中。

    第三步

    把 batteryMonitoringEnabled 置为true

    [UIDevice currentDevice].batteryMonitoringEnabled = YES;  
    

    第四步

    通过如下代码获取 1% 精确度的电量信息

    #import "IOPSKeys.h"
    #import "IOPowerSources.h"
    
    -(double) getBatteryLevel{
        // 返回电量信息
        CFTypeRef blob = IOPSCopyPowerSourcesInfo();
        // 返回电量句柄列表数据
        CFArrayRef sources = IOPSCopyPowerSourcesList(blob);
        CFDictionaryRef pSource = NULL;
        const void *psValue;
        // 返回数组大小
        int numOfSources = CFArrayGetCount(sources);
        // 计算大小出错处理
        if (numOfSources == 0) {
            NSLog(@"Error in CFArrayGetCount");
            return -1.0f;
        }
    
        // 计算所剩电量
        for (int i=0; i<numOfSources; i++) {
            // 返回电源可读信息的字典
            pSource = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, i));
            if (!pSource) {
                NSLog(@"Error in IOPSGetPowerSourceDescription");
                return -1.0f;
            }
            psValue = (CFStringRef) CFDictionaryGetValue(pSource, CFSTR(kIOPSNameKey));
    
            int curCapacity = 0;
            int maxCapacity = 0;
            double percentage;
    
            psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSCurrentCapacityKey));
            CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, &curCapacity);
    
            psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSMaxCapacityKey));
            CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, &maxCapacity);
    
            percentage = ((double) curCapacity / (double) maxCapacity * 100.0f);
            NSLog(@"curCapacity : %d / maxCapacity: %d , percentage: %.1f ", curCapacity, maxCapacity, percentage);
            return percentage;
        }
         return -1.0f;  
    }
    

    至此,获取系统剩余电量完毕,文章主要总结自戴铭老师的博客,同时加入了里面的一些操作细节。具体demo见如下链接https://github.com/Git-ChenPan/GetPowerSourcesInfo

    相关文章

      网友评论

        本文标题:iOS 获取系统剩余电量

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