Получить состояние батареи для каждого изменения в IOS

Я хочу отобразить состояние батареи моего устройства в iOS.

Я пишу следующий код для отображения состояния батареи.

UIDevice *myDevice = [UIDevice currentDevice];

[myDevice setBatteryMonitoringEnabled:YES];
double batLeft = (float)[myDevice batteryLevel] * 100;
NSLog(@"%.f",batLeft);
NSString * levelLabel = [NSString stringWithFormat:@"%.f%%", batLeft];
lblLabel.text =levelLabel;

Он показывает состояние батареи нормально, когда приложение работает. Но когда приложение работает в фоновом режиме, оно не принимает обновленное значение. Я хочу отображать состояние батареи, что устройство имеет в любое время. Я также хочу сделать уведомление, когда батарея умирает от 2 до 3%.

2 ответа

Чтобы добиться того, что вы хотите сделать со своим приложением, вам необходимо получить разрешение на запуск фонового режима. Единственное условие, позволяющее приложениям работать в фоновом режиме, - это приложения, которые должны воспроизводить фоновое аудио, например музыкальные проигрыватели или VOIP-клиенты. Если это просто тестовое приложение, и вы не собираетесь публиковать его через магазин приложений, вы можете использовать AVAudioSession для получения фоновых разрешений и опроса состояния батареи. Если вы намереваетесь опубликовать приложение, сценарий, в котором ваше приложение получает фоновые разрешения, должен принести пользу пользователю. т.е. он должен воспроизводить музыку или обрабатывать телефонные звонки.

Вот пример для проверки батареи каждую секунду. Вам нужно проверить, когда состояние батареи изменилось, но я предполагаю, что ваш текущий код читается только один раз в viewDidLoad.

- (void)viewDidLoad {
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkBattery) userInfo:nil repeats:YES];
}



- (void)checkBattery {

    [myDevice setBatteryMonitoringEnabled:YES];
    double batLeft = (float)[myDevice batteryLevel] * 100;
    NSLog(@"%.f",batLeft);
    NSString * levelLabel = [NSString stringWithFormat:@"%.f%%", batLeft];
    lblLabel.text =levelLabel;

}
Другие вопросы по тегам