如何在iOS中获取详细的电池信息?

5

我想知道在iOS上是否可以获取有关电池的信息,例如:电池容量(mA)、电压(V)、循环次数。

我知道UIDevice类,但电池电量不是我要找的。

5个回答

5

试试UIDeviceListener,它基本上是通过不使用任何私有API从UIDevice中窃取整个电池数据字典。它暴露了大量信息:

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

5
似乎在iOS 10中已经没有这个信息了 :-( - David H

3
我可能错了,但使用公共API并不可能实现这一点。根据UIDevice文档,你只能获取电池电量、其状态并启用电池监控。

更新2019年2月15日:看起来iOS UIDevice API 现在允许开发者访问设备的电池充电级别。哇!它目前公开了四个不同的API。从它们的外观来看,这些API并不是“私有的”,也就是说,开发者可以放心使用而不必担心苹果阻止你的应用进入AppStore。

获取设备电池状态

  1. var batteryLevel: Float(设备的电池充电级别)。
  2. var isBatteryMonitoringEnabled: Bool(一个布尔值,指示是否启用电池监控(true)或未启用(false))。
  3. var batteryState: UIDevice.BatteryState(设备的电池状态)。
  4. enum UIDevice.BatteryState(设备的电池电源状态)。

可以的,请查看此链接 - https://itunes.apple.com/us/app/system-monitor-ultimate/id740765454?mt=8 - Shohrab
@Wilson 这是一个非常老的回答。请随意更新/编辑我的回答。 - Srikar Appalaraju

1

是的,这是可能的。通过使用私有框架iosDiagnosticsupport.Framework。
经过一些测试,我获得了关于iDevice电池的某些数据,而不是整体日志。以下是一些可能对您有所帮助的链接... iOS诊断第3部分


能否请您详细阐述一下您的答案,并为所提供的解决方案添加更多的描述呢? - abarisone
实际上,有一个私有框架可以访问设备日志...您可以通过项目开始。 - ajinkya joshi

1

它没有从设备中获取电压或容量,而是从预先填充的文件中读取:https://github.com/Asido/SystemMonitor/blob/master/SystemMonitor/HardcodedDeviceData.m#L317 - Wojciech Rutkowski
请尝试使用这个库。您需要创建构建以使用它。 https://github.com/libimobiledevice/libimobiledevice - Shohrab
该 lib 系统监视器从硬编码文件中获取值。 - Wilson

1

看看JSystemInfoKit库。

你需要先导入IOKit框架(从这里获取.framework文件/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOKit.framework),并在iOS项目中导入IOKit头文件(从这里获取)。

这里你可以找到所需使用的方法,以获取详细的电池信息。

此外,IOPSCopyPowerSourcesInfo(来自IOPowerSources.h)返回一个NSDictionary,其中包含更多信息,如电池健康状况


它仅支持OS X,您能否提供有关iOS实现的更多细节? - Wojciech Rutkowski
@WojciechRutkowski 我在Github上创建了一个小项目 https://github.com/gderaco/iOS-Battery-Info-Demo - gderaco
@WojciechRutkowski,在他的 GitHub 页面上有 SystemInfoKit 的文档/教程和源代码吗?用户已经删除了一切。 - SkrewEverything
@SkrewEverything 抱歉,我没有它。 - Wojciech Rutkowski
@WojciechRutkowski 谢谢您的回复。 - SkrewEverything

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接