I would like to know if my app is running with an external power cable attached. Is it possible to find out this state at runtime?
An extra question: would this be able to differentiate between true USB power and those external "battery packs"?
Thank you!
Use UIDevice
property batteryState
:
[[UIDevice currentDevice] batteryState] == UIDeviceBatteryStateCharging
From UIDevice Docs:
typedef enum {
UIDeviceBatteryStateUnknown,
UIDeviceBatteryStateUnplugged,
UIDeviceBatteryStateCharging,
UIDeviceBatteryStateFull,
} UIDeviceBatteryState;
As for your 2nd question. I don't believe you can determine any difference between a battery pack and a wall charger since the above UIDeviceBatteryState
flags are the only "states" a device battery can report. So both a battery pack and wall charger would appear as either UIDeviceBatteryStateCharging
or UIDeviceBatteryStateFull
(or UIDeviceBatteryStateUnplugged
if the battery pack is plugged in but out of juice).
You can detect whether the battery is charging, but that's as close as you can get with existing APIs – there's no way to detect where the power is "coming from", so to speak.
UIDeviceBatteryState batteryState = [UIDevice currentDevice].batteryState;
if (batteryState == UIDeviceBatteryStateCharging) {
// Your code here
}
I had to include the line,
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
or else batteryState only returns UIDeviceBatteryStateUnknown. Perhaps this became necessary since this question was initially asked and answered. I found the tip here: Determine accurate iPhone battery level.