我想知道是否可以接收有关电池的信息,例如:容量(mA)、电压(V)、iOS 中的循环计数?
我知道 UIDevice 类,但电池电量不是我想要的。
试试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;
}
我可能错了,但使用公共 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
(设备的电池电量状态)。可以使用公共 API 获取电池容量和电压,并且应用商店也允许这样做。链接在这里 -
是的,有可能……通过使用私有框架 iosDiagnosticsupport.Framework。
在做了一些测试之后,我有一些关于电池的数据,而不是 iDevice 的整体日志。以下是一些可能对您有所帮助的链接... iOS 诊断第 3 部分
查看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 ,其中包含更多信息,例如电池健康。