在iOS上获取电池健康信息

目前在应用程序商店中有应用程序(所以它不需要越狱)告诉你:

  1. 您iPhone上的电池电量的确切百分比值。 我已经尝试过苹果的官方代码示例 ,虽然它告诉你什么时候你的iPhone正在充电和放电,但它给了我5%的值的步骤。 这些应用程序如何获得电池百分比的准确值?

  2. 如电池健康应用程序显示

    • 当前最大容量制造商的容量
    • 目前的放电率
    • 终身电池循环次数
  3. 相同的应用程序还提供了手机充电时的充电速率(以瓦特为单位)(检查图像)和当前充电器的额定功率的信息

应用程序:电池健康截图1 应用程序:电池健康截图2


当[UIDevice]提供的信息很less,而且几乎没有电池健康和性能方面的信息时,这些应用程序如何获得关于电池健康状况的详细信息。

很可能这样的应用程序使用IOKit框架,它在OS X上是公开的,但在iOS上是私有的(Apple不允许使用App Store应用程序的私有框架,尽pipe在审查过程中有时可能会忽略它)。

你可以在这里看到一个示例项目。

我开发了一个解决scheme,可以让你获得这些信息,而不需要任何私人的API调用(虽然我当然不能保证你会批准它)。

虽然有问题的信息确实源自IOKit,但我find了一种不依赖于IOKit的方法。 我的解决scheme完全不依赖于任何types的私有API。 相反,我开发了一个名为UIDeviceListener的组件,它有效地劫持了来自UIDevice的IOKit数据。

试一试,我已经把一个简单的示例程序: https : //github.com/eldoogy/PowerData

作为一个例子,下面是它检索到的IOKit字典的样子(请注意,它可以根据iOS版本和设备模型,生成等而变化):

 { AdapterDetails = { Amperage = 1000; Description = "usb host"; FamilyCode = "-536854528"; PMUConfiguration = 1000; Watts = 5; }; AdapterInfo = 16384; Amperage = 1000; AppleRawCurrentCapacity = 1279; AppleRawMaxCapacity = 1275; AtCriticalLevel = 0; AtWarnLevel = 0; BatteryData = { BatterySerialNumber = REDACTED; ChemID = 355; CycleCount = 524; DesignCapacity = 1420; Flags = 640; FullAvailableCapacity = 1325; ManufactureDate = REDACTED; MaxCapacity = 1273; MfgData = REDACTED; QmaxCell0 = 1350; StateOfCharge = 100; Voltage = 4194; }; BatteryInstalled = 1; BatteryKey = "0003-default"; BootBBCapacity = 52; BootCapacityEstimate = 2; BootVoltage = 3518; CFBundleIdentifier = "com.apple.driver.AppleD1815PMU"; ChargerConfiguration = 990; CurrentCapacity = 1275; CycleCount = 524; DesignCapacity = 1420; ExternalChargeCapable = 1; ExternalConnected = 1; FullyCharged = 1; IOClass = AppleD1815PMUPowerSource; IOFunctionParent64000000 = <>; IOGeneralInterest = "IOCommand is not serializable"; IOInterruptControllers = ( IOInterruptController34000000, IOInterruptController34000000, IOInterruptController34000000, IOInterruptController34000000 ); IOInterruptSpecifiers = ( <03000000>, <26000000>, <04000000>, <24000000> ); IOMatchCategory = AppleD1815PMUPowerSource; IOPowerManagement = { CurrentPowerState = 2; DevicePowerState = 2; MaxPowerState = 2; }; IOProbeScore = 0; IOProviderClass = AppleD1815PMU; InstantAmperage = 0; IsCharging = 0; Location = 0; Manufacturer = A; MaxCapacity = 1275; Model = "0003-A"; Serial = REDACTED; Temperature = 2590; TimeRemaining = 0; UpdateTime = 1461830702; Voltage = 4182; "battery-data" = { "0003-default" = <...>; "0004-default" = <...>; "0005-default" = <...}; "built-in" = 1; } 

这个项目可能会帮助你找出电池信息。

https://github.com/Shmoopi/iOS-System-Services