美文网首页
IOKit获取电池电量

IOKit获取电池电量

作者: 等消息的人 | 来源:发表于2019-04-22 20:23 被阅读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
    

    相关文章

      网友评论

          本文标题:IOKit获取电池电量

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