Подтвердить что ты не робот

Оставшееся время до завершения зарядки, iOS

Я использую:

UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
float batLeft = [myDevice batteryLevel];
int i = [myDevice batteryState];    
int batinfo = batLeft * 100;

чтобы найти состояние батареи. Я ищу, чтобы найти, как найти оставшееся время, пока заряд не будет завершен. ex: 1 час 20 минут. Как я могу найти его программно?

4b9b3361

Ответ 1

Я не нашел никакого метода для этого в официальной документации , ни в закрытом заголовке class-dumped, класса UIDevice.

Поэтому нам нужно что-то придумать. Лучшее "решение", которое я имею в виду на данный момент, похоже на подход, применяемый при оценке времени загрузки: вычисление средней скорости загрузки/зарядки и деление оставшейся суммы (данных или заряда) на эту скорость:

[UIDevice currentDevice].batteryMonitoringEnabled = YES;
float prevBatteryLev = [UIDevice currentDevice].batteryLevel;
NSDate *startDate = [NSDate date];

[[NSNotificationCenter defaultCenter]
    addObserver:self
       selector:@selector(batteryCharged)
           name:UIDeviceBatteryLevelDidChangeNotification
         object:nil
];

- (void)batteryCharged
{
    float currBatteryLev = [UIDevice currentDevice].batteryLevel;
    // calculate speed of chargement
    float avgChgSpeed = (prevBatteryLev - currBatteryLev) / [startDate timeIntervalSinceNow];
    // get how much the battery needs to be charged yet
    float remBatteryLev = 1.0 - currBatteryLev;
    // divide the two to obtain the remaining charge time
    NSTimeInterval remSeconds = remBatteryLev / avgChgSpeed;
    // convert/format `remSeconds' as appropriate
}