IOKit获取电池电量

2019-04-22  本文已影响0人  等消息的人

在 iOS 中,IOKit framework 是专门用于跟硬件和内核服务通信的。所以我们可以通过IOKit framwork获取硬件信息,进而获取电池电量信息。

一、添加IOKit.framework静态库

在iOS开发中IOKit.framework不能直接添加到项目中,而Mac开发可以直接添加IOKit.framework到项目中,所以我们可以将Mac项目中的IOKit.framework拷贝出来添加到iOS项目中来使用它。

1.创建Mac项目File->New->Project

创建Mac项目

2.添加IOKit静态库

添加静态库

3.从frameworks文件夹拷贝出IOKit.framework,并且拖拽到iOS项目中

IOKit.framework位置

4.将IOKit.framework静态库中的headers文件夹内的IOPSKeys.h和IOPowerSources.h文件拷贝到项目中

引入IOKit.frame及其头文件

二、获取电量信息的代码如下

#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;
}

打印结果如下

curCapacity : 100 / maxCapacity: 100 , percentage: 100.0
上一篇下一篇

猜你喜欢

热点阅读