在iOS上获取电池健康信息
目前在应用程序商店中有应用程序(所以它不需要越狱)告诉你:
-
您iPhone上的电池电量的确切百分比值。 我已经尝试过苹果的官方代码示例 ,虽然它告诉你什么时候你的iPhone正在充电和放电,但它给了我5%的值的步骤。 这些应用程序如何获得电池百分比的准确值?
-
如电池健康应用程序显示
- 当前最大容量与制造商的容量
- 目前的放电率
- 终身电池循环次数
-
相同的应用程序还提供了手机充电时的充电速率(以瓦特为单位)(检查图像)和当前充电器的额定功率的信息 。
当[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; }
这个项目可能会帮助你找出电池信息。