0

我在监控电池时遇到了问题。在前台我只能获得一次关卡,而且似乎我也没有在后台获得变化。 

如果我将一个新的 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
     }
}

问题:

  1. 为什么不多次调用batteryStateDidChange 和batteryLevelDidChange?
  2. 为什么即使我已将batteryMonitoringEnabled 设置为true,我也无法使用计时器从[UIDevice currentDevice].batteryLevel 获取当前电池电量?
  3. 是否可以在应用程序处于后台或手机锁定时监控电池?该应用程序在后台运行,因为我一直在记录 GPS 数据。
4

0 回答 0