如何从连接的iOS设备获得电池充电周期



我在OS X应用程序中使用MobileDevice.framework,并且我已经能够使用AMDeviceCopyValue(device, domain, key)函数(参数"com.apple.mobile.battery"用于domain,参数"BatteryCurrentCapacity"用于key)来了解通过USB连接的iOS设备的电池充电情况。

我还想得到电池的充电周期数。我相信这是可能的,因为iBackupBot能够获取这些数据。有人知道它是怎么做到的吗?我下载了该程序的免费副本,并在iPhone 3GSiPhone 4SiPhone 5上进行了测试。它能够获取所有三台设备的数据。

我已经通过LLDB运行了iBackupBot,并记录了它对AMDeviceCopyValue()的每次使用。在这样做的过程中,我确定它不会从中获得充电周期计数。

您可以使用设备的ioreg(IORegistry)转储获取CycleCount和一堆其他信息。例如,请参阅此处获取iPhone 5S的IORegistry转储。注意本节:

 +-o AppleD2045PMUPowerSource  <class AppleD2045PMUPowerSource, busy 0, retain count 10>
    | |   |   |   |   {
    | |   |   |   |     "battery-data" = {
                            .....
                            "CycleCount" = 1
        | |   |   |   |     "ChargerConfiguration" = 960
        | |   |   |   |     "DesignCapacity" = 1550
        | |   |   |   |     "BatteryData" = {"BatterySerialNumber"="C0133237ALXFHCWBP","ChemID"=4484,"Flags"=256,"QmaxCell0"=1619,"Voltage"=4051,"CycleCount"=1,"StateOfCharge"=72,"DesignCapacity"=1550,"FullAvailableCapacity"=1573,"MaxCapacity"=1517,"MfgData"=<4330313333323337414c58464843574250000000000000010000010000000100>,"ManufactureDate"="1332"}
        | |   |   |   |     "AtCriticalLevel" = No

iOS上的私有IOKit.framework有一个API,用于访问所有这些信息(您可以查看转储以计算属性名称等,以便能够以编程方式访问它)。Erica Sadun有一些开源代码,使用专用IOKit函数访问一些设备硬件信息(没有越狱,IIRC),所以这可能会有所帮助。

至于从Mac上获取这些信息,不知道。如果你有一个设备上的应用程序,可以从IORegistry中提取信息,并通过USB将其发送到Mac,那就可以了。如果你想在设备上不安装任何其他软件的情况下完成这项工作,你必须想办法远程获取ioreg转储。

希望这能让你有所收获!

我想你说的是获取设备的电池状态,在启用UIDevice对象的batteryMonitoringEnabled后,你可以获得电池的当前状态和级别,

比如

UIDevice *device = [UIDevice currentDevice];
device.batteryMonitoringEnabled = YES;
NSLog(@"State: %i Charge: %f", device.batteryState, device.batteryLevel);

有不同的UIDeviceBatteryState设备从你可以得到

  • UIDeviceBatteryStateUnplugged
  • UIDeviceBatteryStateCharging
  • UIDeviceBatteryStateFull

最新更新