11

MobileDevice.framework在一个OS X应用程序中使用,并且我已经能够获得iOS连接的设备的电池如何充电USB使用带有参数的AMDeviceCopyValue(device, domain, key)函数和."com.apple.mobile.battery"domain"BatteryCurrentCapacity"key

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

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

4

2 回答 2

14

您可以使用设备的 (IORegistry) 转储来获取CycleCount和一堆其他信息。ioreg例如,请参阅此处以获取 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 上的 privateIOKit.framework有一个用于访问所有这些信息的 API(您可以查看转储以找出属性名称等,以便能够以编程方式访问它)。Erica Sadun 有一些开源代码,它们使用私有 IOKit 函数来访问一些设备硬件信息(无需越狱,IIRC),所以这可能会有所帮助。

至于从 Mac 上获取这些信息,不知道。如果您有一个可以从 IORegistry 中提取信息并通过 USB 将其发送到 Mac 的设备应用程序,则该应用程序可以工作。如果您想在设备上不安装任何其他软件的情况下执行此操作,则必须找到一种远程获取ioreg转储的方法。

希望这能让你有所收获!

于 2013-12-17T04:44:57.427 回答
0

我猜您正在谈论获取设备的电池状态,启用batteryMonitoringEnabledUIDevice 对象后,您可以获得电池的当前状态和电量,

喜欢,

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

您可以获得不同的设备 UIDeviceBatteryState

  • UIDeviceBatteryStateUnplugged,
  • UIDeviceBatteryStateCharging,
  • UIDeviceBatteryStateFull,
于 2013-12-17T03:49:22.193 回答