程序员

iOS 获取系统剩余电量

2019-05-27  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读