获取iOS设备的电量信息:Battery Level
2015-04-15 12:42
225 查看
本文介绍了如何通过API获取iOS设备的电量信息。
移动设备的电量消耗一直是一个大问题,APP开发中也不可避免地需要收集APP运行时的电量消耗信息,这也是APP性能的衡量标准之一。
首先需要打开iphone设置中的电量统计。
打开Developer选项中的Start Logging —> 断开iphone与PC连接 —> 一系列的用户操作 —> Stop Logging —> 连接iphone与PC, 将电量消耗数据导入Instruments。
但这种方式获取的信息不是非常直观。
IOS系统的电量可以通过UIDevice获取到,但在IOS 8.0之前,UIDevice中的batteryLevel只能精确到5%,需要通过其他方式获取1%精度的电量信息。而在IOS 8.0之后,开始支持1%的精确度。
首先,需要将IOPowerSources.h,IOPSKeys.h,IOKit三个文件导入到工程中。然后即可通过如下代码获取1%精确度的电量信息:
当然, 前提仍然是要把batteryMonitoringEnabled置为true。
最后,就可以查看并分析该APP的耗电量情况了。
移动设备的电量消耗一直是一个大问题,APP开发中也不可避免地需要收集APP运行时的电量消耗信息,这也是APP性能的衡量标准之一。
首先需要打开iphone设置中的电量统计。
1.通过Instruments获取
Instruments工具自带的Energy Diagnostics工具可以获取到iphone特定时段的电量消耗信息。具体步骤:打开Developer选项中的Start Logging —> 断开iphone与PC连接 —> 一系列的用户操作 —> Stop Logging —> 连接iphone与PC, 将电量消耗数据导入Instruments。
但这种方式获取的信息不是非常直观。
2. 通过UIDevice获取
UIDevice提供了当前ios设备的详细信息,如name, systemVersion, localizedModel, batteryLevel等。UIDevice.currentDevice.batteryMonitoringEnabled = true let batteryLevel = UIDevice.currentDevice().batteryLevel UIDevice.currentDevice.batteryMonitoringEnabled = false
IOS系统的电量可以通过UIDevice获取到,但在IOS 8.0之前,UIDevice中的batteryLevel只能精确到5%,需要通过其他方式获取1%精度的电量信息。而在IOS 8.0之后,开始支持1%的精确度。
3. 通过IOKit framework来获取
IOKit framework在IOS中用来跟硬件或内核服务通信,常用于获取硬件详细信息。首先,需要将IOPowerSources.h,IOPSKeys.h,IOKit三个文件导入到工程中。然后即可通过如下代码获取1%精确度的电量信息:
-(double) getBatteryLevel{ // returns a blob of power source information in an opaque CFTypeRef CFTypeRef blob = IOPSCopyPowerSourcesInfo(); // returns a CFArray of power source handles, each of type CFTypeRef CFArrayRef sources = IOPSCopyPowerSourcesList(blob); CFDictionaryRef pSource = NULL; const void *psValue; // returns the number of values currently in an array int numOfSources = CFArrayGetCount(sources); // error in CFArrayGetCount if (numOfSources == 0) { NSLog(@"Error in CFArrayGetCount"); return -1.0f; } // calculating the remaining energy for (int i=0; i<numOfSources; i++) { // returns a CFDictionary with readable information about the specific power source 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; }
当然, 前提仍然是要把batteryMonitoringEnabled置为true。
最后,就可以查看并分析该APP的耗电量情况了。
相关文章推荐
- ios获取设备的系统版本,设备信息,电池电量
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
- 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
- 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
- iOS 获取当前设备具体型号(当前支持到iPhone7/iPhone7P )、系统版本、电量、序列号、设备名称、应用相关信息获取等
- iOS 如何获取设备的各种信息
- iOS获取设备型号、设备类型等信息
- iOS-获取设备信息all
- 史上最全的iOS各种设备信息获取总结
- iOS开发-Swift获取手机设备信息(UIDevice)
- iOS获取设备信息总结
- iOS 获取设备信息
- ios获取设备的信息
- 网上搜集到iOS开发中获取手机IDFA,手机序列号,设备名称,别名,分辨率等信息,这里做个总结
- ios下获取所有实体/虚拟网卡的信息,并以此判断设备所处的网络状态
- WP8开发系列2:如何获取设备电源信息?电量