如何在 iOS 中获取大量电池信息?

Posted

技术标签:

【中文标题】如何在 iOS 中获取大量电池信息?【英文标题】:How to obtain extensive battery info in iOS? 【发布时间】:2012-09-10 06:16:29 【问题描述】:

我想知道是否可以在 ios 中接收有关电池的信息,例如:容量 (mA)、电压 (V)、循环计数?

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

【问题讨论】:

【参考方案1】:

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


    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;

【讨论】:

iOS 10 中似乎不再存在此信息 :-(【参考方案2】:

我可能对此有误,但使用公共 API 是不可能的。根据 UIDevice 文档,您似乎最多只能获取电池电量、状态并启用电池监控。

2019 年 2 月 15 日更新:看起来 iOS UIDevice API 现在允许开发人员访问设备的电池电量。哇!它目前公开了 4 个不同的 API。从表面上看,这些并不是“私有的”,换句话说,开发人员可以安全地使用它们,而无需 Apple 阻止您的应用进入 AppStore。

获取设备电池状态

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

【讨论】:

有可能。请检查此链接 - itunes.apple.com/us/app/system-monitor-ultimate/… @Wilson 这是一个非常古老的答案。请随时更新/编辑我的答案。【参考方案3】:

可以使用公共 API 获取电池容量和电压,应用商店也允许这样做。这是链接 -

    应用商店 :https://itunes.apple.com/us/app/system-monitor-ultimate/id740765454?mt=8 github:https://github.com/Asido/SystemMonitor

【讨论】:

它不是从设备获取电压或容量,而是从预填充文件中读取:github.com/Asido/SystemMonitor/blob/master/SystemMonitor/… 你能试试这个库吗?您需要创建构建才能使用它。 github.com/libimobiledevice/libimobiledevice lib 系统监视器从硬编码文件中获取值。【参考方案4】:

是的,有可能……通过使用私有框架 iosDiagnosticsupport.Framework。 在做了一些测试之后,我有一些关于电池的数据,而不是 iDevice 的整体日志。以下是一些可能对您有所帮助的链接...iOS Diagnostics Part 3

【讨论】:

能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述? 其实有私有框架可以访问设备日志...可以通过this项目入手【参考方案5】:

查看JSystemInfoKit 库。

您想先导入 IOKit 框架(从此处获取 .framework 文件 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library /Frameworks/IOKit.framework)和 IOKit 标头(从 here 获取这些文件)在您的 iOS 项目中。

Here您可以找到获取大量电池信息所需的方法。

另外,IOPSCopyPowerSourcesInfo(来自 IOPowerSources.h)返回一个包含更多信息的 NSDictionary,例如 电池健康

【讨论】:

JSystemInfoKit 只支持 OS X,能否提供更多关于 iOS 实现的细节? @WojciechRutkowski 我在 Github 上创建了一个小项目 github.com/gderaco/iOS-Battery-Info-Demo @WojciechRutkowski 你在他的 github 页面上是否有文档/教程和 SystemInfoKit 的源代码?用户已删除所有内容。 @SkrewEverything 对不起,我没有。 @WojciechRutkowski 感谢您的回复。

以上是关于如何在 iOS 中获取大量电池信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式获取使用大量能源的应用程序,例如 MacBook 的电池图标

如何在运行时获取 Android 中的电池统计信息?

如何在代码中获取电池的容量

如何从连接的 iOS 设备获取电池充电周期?

如何在android中获取电池电量变化(仅当有电量/百分比变化时)?

如何在 iOS 中找出我的应用程序的 CPU 利用率、内存使用情况、电池使用情况等