4

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

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

4

5 回答 5

5

试试UIDeviceListenerUIDevice ,它基本上是在不使用任何私有 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;
}
于 2016-04-30T00:04:54.343 回答
3

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

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

获取设备电池状态

  1. var batteryLevel: Float(设备的电池电量)。
  2. var isBatteryMonitoringEnabled: Bool(一个布尔值,指示是否启用电池监控(true)或不启用(false))。
  3. var batteryState: UIDevice.BatteryState(设备的电池状态)。
  4. enum UIDevice.BatteryState(设备的电池电量状态)。
于 2012-09-10T06:54:10.737 回答
1

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

  1. 应用商店:https ://itunes.apple.com/us/app/system-monitor-ultimate/id740765454?mt=8
  2. github:https ://github.com/Asido/SystemMonitor在此处输入图像描述
于 2015-12-11T22:52:10.510 回答
0

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

于 2015-06-23T09:33:34.437 回答
0

查看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 ,其中包含更多信息,例如电池健康

于 2016-04-02T18:39:18.973 回答