I'm wondering is it possible to receive information about battery like: capacity (mA), voltage (V), cycle count within iOS?
I know UIDevice class, but battery level is not what I'm looking for.
I'm wondering is it possible to receive information about battery like: capacity (mA), voltage (V), cycle count within iOS?
I know UIDevice class, but battery level is not what I'm looking for.
I might be wrong about this but using public APIs this is not possible. According to the UIDevice
documentation, it appears the most you can do is get the battery charge level, its state, and enable battery monitoring.
Update 15th Feb 2019: Looks like iOS UIDevice
API's now allow developers to get access to battery charge level for the device. Whooo! It currently exposes 4 different API's. By the looks of it these are not "private", in other words can be used safely by developers without Apple blocking your app from AppStore.
Getting the Device Battery State
var batteryLevel: Float
(The battery charge level for the device).var isBatteryMonitoringEnabled: Bool
(A Boolean value indicating whether battery monitoring is enabled (true) or not (false)).var batteryState: UIDevice.BatteryState
(The battery state for the device).enum UIDevice.BatteryState
(The battery power state of the device).Try UIDeviceListener, it basically steals the entire battery data dictionary from UIDevice
without using any private APIs. It exposes tons of information:
{
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;
}
I might be wrong about this but using public APIs this is not possible. According to the UIDevice
documentation, it appears the most you can do is get the battery charge level, its state, and enable battery monitoring.
Update 15th Feb 2019: Looks like iOS UIDevice
API's now allow developers to get access to battery charge level for the device. Whooo! It currently exposes 4 different API's. By the looks of it these are not "private", in other words can be used safely by developers without Apple blocking your app from AppStore.
Getting the Device Battery State
var batteryLevel: Float
(The battery charge level for the device).var isBatteryMonitoringEnabled: Bool
(A Boolean value indicating whether battery monitoring is enabled (true) or not (false)).var batteryState: UIDevice.BatteryState
(The battery state for the device).enum UIDevice.BatteryState
(The battery power state of the device).Yes it is possible..by using private framework iosDiagnosticsupport.Framework.
After doing some tests, i have certain data about battery rather overall logs for iDevice. Here are some links that might help you... iOS Diagnostics Part 3
Its possible to fetch Battery capacity and voltage using public API and which allowed in app store as well. Here is the link -
Look at the JSystemInfoKit library.
You want to import the IOKit framework first (get the .framework file from here /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOKit.framework ) and IOKit headers (get those files from here) in your iOS project.
Here you can find the methods you need to use to get extensive battery information.
Plus, IOPSCopyPowerSourcesInfo (from IOPowerSources.h) returns a NSDictionary with more information like battery health.
© 2022 - 2024 — McMap. All rights reserved.