我在监控电池时遇到了问题。在前台我只能获得一次关卡,而且似乎我也没有在后台获得变化。
如果我将一个新的 UIViewController 放在一个监控器的前面,然后再回来,电池电量就会更新。
-(void)startMonitoringBattery
{
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(batteryStateDidChange:)
name:UIDeviceBatteryStateDidChangeNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(batteryLevelDidChange:)
name:UIDeviceBatteryLevelDidChangeNotification
object:nil];
batteryCheckTimer = [NSTimer scheduledTimerWithTimeInterval:(10.0)
target:self
selector:@selector(batteryCheck)
userInfo:nil
repeats:YES];
}
- (void)batteryStateDidChange:(NSNotification *)notification
{
[self batteryCheck];
}
- (void)batteryLevelDidChange:(NSNotification *)notification
{
[self batteryCheck];
}
调用此方法时,我想获取当前的电池电量,而不是我启动监视器时的电量。
- (void)batteryCheck
{
float STOP_AT_BATTERY_LEVEL = 50.0;
float currentBatteryLevel = [UIDevice currentDevice].batteryLevel;
if([UIDevice currentDevice].batteryLevel <= STOP_AT_BATTERY_LEVEL)
{
// STOP BATTERY CONSUMING TASK
}
}
问题:
- 为什么不多次调用batteryStateDidChange 和batteryLevelDidChange?
- 为什么即使我已将batteryMonitoringEnabled 设置为true,我也无法使用计时器从[UIDevice currentDevice].batteryLevel 获取当前电池电量?
- 是否可以在应用程序处于后台或手机锁定时监控电池?该应用程序在后台运行,因为我一直在记录 GPS 数据。