Getting Battery Health Information on iOS

后端 未结 3 1022
天命终不由人
天命终不由人 2020-12-29 10:08

There are currently apps in the app-store (so it does not require jailbreak) that tell you :

  1. Exact percentage value of battery level you have on your iPhone

3条回答
  •  有刺的猬
    2020-12-29 10:34

    I've developed a solution that will allow you to obtain this information without invoking any private API calls (though I certainly couldn't promise you Apple would approve it).

    While the information in question does originate from IOKit, I've found a way of getting it without relying on IOKit. My solution relies on absolutely no private APIs of any kind. Instead, I developed a component called UIDeviceListener that effectively hijacks the IOKit data from UIDevice.

    Give it a try, I've put together a simple sample program: https://github.com/eldoogy/PowerData

    As an example, here is what the IOKit dictionary it retrieves tends to look like (note that it can vary by iOS versions and by device model, generation, etc.):

    {
        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;
    }
    

提交回复
热议问题