我目前正在尝试改善我们正在开发的应用程序的电池使用情况。
我发现的唯一一件事是越狱解决方案的百分比(这里),
例如,我没有找到像 3.4 mAh/min 这样的绝对值。
我也没有找到 iOS 指南来评估电池消耗。
理想情况下,我很想看到类似的东西:
- 谷歌分析 SDK:0.4 毫安/分钟
- 蓝牙 SDK:1.0 毫安/分钟
- API SDK : 2.0 毫安/分钟
Battery Doctor 提供的东西:
这甚至可能吗?
感谢您的帮助 !
我目前正在尝试改善我们正在开发的应用程序的电池使用情况。
我发现的唯一一件事是越狱解决方案的百分比(这里),
例如,我没有找到像 3.4 mAh/min 这样的绝对值。
我也没有找到 iOS 指南来评估电池消耗。
理想情况下,我很想看到类似的东西:
Battery Doctor 提供的东西:
这甚至可能吗?
感谢您的帮助 !
我们使用依赖于私有 API 的https://github.com/ethan605/ios-battery-stat取得了不同程度的成功。
因此,如果您在 Apple Store 上部署您的应用程序,则不能使用它,但在部署到 TestFlight 或类似的 beta 用户应用程序商店时它会很有用。
萨米人
经过几天的一些测试,我非常怀疑我们看到的这些数字不是设备上的实际测量值,它们似乎太恒定了,而且只有一些实际运行的应用程序在列表中。 .
我有一个理论,他们有某种有限的数据库,如果手机上的任何应用程序与这个列表匹配,它就会被包括在内。
它仍然可以作为一个有用的提示,什么用得很多,什么用得很少。但我认为您不应该将其视为手机中的“真实”数字。谁能证实或反驳这个理论???
这也解释了为什么您找不到获取此信息的方法
还有两个几乎相同的应用程序,一个带有橙色电池图标,一个带有绿色电池图标,并且似乎包含和排除了相同的应用程序。这似乎也有点可疑......还有第三个应用程序“Battery Lite”,它们相似但没有 mAh/min 读数(顺便说一句奇怪的单位)
试试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;
}
特别令人感兴趣的是InstantAmperage
键,它(在设备未插电时)显示实际设备功耗(以 mAh 为单位)。当您的应用程序正在运行时,这将显示您的应用程序的确切功耗。
更新:基于 iOS 10 测试版,看起来苹果已经从字典中完全删除了这些信息(不管它是如何加载的,即使我们直接通过调用来加载它IOKit
)。字典仍然存在,但它现在只包含基本键,例如ExternalConnected
和CurrentCapacity
。
Instruments 不会为您提供这样的漂亮图片,但它会向您显示 CPU、GPU 使用情况,这通常应该是电池消耗的指标,并且肯定是查看应用程序性能/硬件利用率的好方法。