現在、アプリストアには次のようなアプリがあります(脱獄は必要ありません)。
IPhoneのバッテリーレベルの正確なパーセンテージ値。私はAppleの公式 コードサンプル を試しましたが、iPhoneの充電と放電のタイミングはわかりますが、5%ステップで値が表示されます。これらのアプリはどのようにしてバッテリーのパーセンテージの正確な値を取得しますか?
Battery Health showのようなアプリケーション
同じアプリケーションは、電話が充電中のときのワット単位の充電率(画像を確認)および現在の充電器の電力定格に関する情報も提供します。
[UIDevice]が提供する情報がほとんどなく、バッテリーの状態とパフォーマンスに関する情報がほとんどない場合、これらのアプリケーションはどのようにしてバッテリーの状態に関する詳細を取得しますか。
このようなアプリは、OS XではパブリックでiOSではプライベートであるIOKitフレームワークを使用している可能性があります(AppleではAppStoreアプリにプライベートフレームワークを使用することは許可されていませんが、見落とされることもあります)レビュー中)。
サンプルプロジェクトを見ることができます ここ 。
私は、プライベートAPI呼び出しを呼び出さずにこの情報を取得できるソリューションを開発しました(ただし、Appleが承認することは確かに約束できませんでした)。
問題の情報はIOKitからのものですが、IOKitに依存せずに取得する方法を見つけました。私のソリューションは、いかなる種類のプライベートAPIにもまったく依存していません。代わりに、UIDeviceListener
からIOKitデータを効果的にハイジャックするUIDevice
というコンポーネントを開発しました。
試してみてください。簡単なサンプルプログラムをまとめました: https://github.com/eldoogy/PowerData
例として、取得するIOKit辞書は次のようになります(iOSのバージョンやデバイスのモデル、世代などによって異なる場合があることに注意してください)。
{
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;
}
このプロジェクトは、バッテリー情報を見つけるのに役立つ場合があります。