在 iOS 上获取电池健康信息

问题描述 投票:0回答:4

应用商店中目前有应用程序(因此不需要越狱)告诉您:

  1. 您 iPhone 上电池电量的精确百分比值。我 已经尝试过 Apple 的官方Code Sample,虽然它会告诉您 iPhone 何时充电和放电,但它以 5% 的步长给出了我的值。这些应用程序如何获得 battery percentage 的精确值?

  2. Battery Health show这样的应用程序

    • 当前最大容量制造商的容量
    • 当前放电率
    • 电池寿命周期计数
  3. 同一应用程序还提供有关充电率(以瓦特为单位) 手机充电时(检查图像)和当前充电器的额定功率


当 [UIDevice] 提供的有关电池健康状况的信息如此之少,几乎没有关于电池健康状况和性能的信息时,这些应用程序如何获得如此多的关于电池健康状况的详细信息。

ios objective-c iphone app-store battery
4个回答
5
投票

我已经开发了一个解决方案,允许您在不调用任何私有 API 调用的情况下获取此信息(尽管我当然不能向您保证 Apple 会批准它)。

虽然有问题的信息确实来自 IOKit,但我找到了一种无需依赖 IOKit 即可获取它的方法。我的解决方案绝对不依赖于任何类型的私有 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;
}

4
投票

这类应用很可能使用了IOKit框架,IOKit框架在OS X上是公开的,但在iOS上是私有的(Apple不允许App Store应用使用私有框架,尽管有时在审查时可能会被忽略)。

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


4
投票

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

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


-1
投票

有一款适用于 iPhone 和 iPad 的出色应用程序,您可以免费获得 - “Amperes Battery Charging Lite”https://apps.apple.com/us/app/amperes-battery-charging-lite/id1253789580 或付费版本 - “安培 - 电池充电信息”https://apps.apple.com/us/app/amperes-battery-charge-info/id1245475416。它运行良好,是检查充电器或电池的最佳应用程序。我强烈推荐它。

© www.soinside.com 2019 - 2024. All rights reserved.