Как получить правильный уровень заряда батареи и состояние батареи-ios?

Всегда [myDevice batteryLevel] возвращает -1 и [myDevice batterystate] возвращает 0 (входит в регистр по умолчанию).

Как я могу получить правильные значения? Кто-нибудь может помочь мне решить эту проблему? Ниже приведен мой код.

Код:

UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
float batLeft = [myDevice batteryLevel]*100;
int status=[myDevice batteryState];
NSLog(@"level:%0.0f",batLeft);
NSString *status_str;
switch (status)
{
    case UIDeviceBatteryStateUnplugged:
    {
        NSLog(@"UnpluggedKey");
        status_str=@"UnPlugged";
        break;
    }
    case UIDeviceBatteryStateCharging:
    {
        NSLog(@"ChargingKey");
        status_str=@"Charging";
        break;
    }
    case UIDeviceBatteryStateFull:
    {
        NSLog(@"FullKey");
        status_str=@"BatteryFul";
        break;
    }

default:
{
    NSLog(@"UnknownKey");
    status_str=@"Unknown";
    break;
}
}
NSLog(@"Battery status:%@",status_str);

person Murali Krishna    schedule 21.05.2015    source источник
comment
Вы тестируете на устройстве или симуляторе? тестирование на симуляторе даст вам результат, который вы получаете сейчас. :-)   -  person Vivek Molkar    schedule 21.05.2015


Ответы (2)


Ваш код выглядит нормально, он такой же, как я использовал в одном из своих приложений:

-(void) battery
{
    UIDevice *myDevice = [UIDevice currentDevice];
    [myDevice setBatteryMonitoringEnabled:YES];

    int state = [myDevice batteryState];
    NSLog(@"battery status: %d",state); // 0 unknown, 1 unplegged, 2 charging, 3 full

    double batLeft = (float)[myDevice batteryLevel] * 100;
    NSLog(@"battery left: %ld", batLeft);
}

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

Попробуйте на одном реальном устройстве.

person Massimo Polimeni    schedule 21.05.2015
comment
Чем этот код отличается от того, что уже есть в вопросе? Пожалуйста, объясните, как это решает проблему. - person rmaddy; 21.05.2015

Надеюсь, вы не проверяете это на своем симуляторе :)

Вы не получите точный уровень заряда батареи вашего устройства, он всегда кратен 0,05. Это означает, что если уровень заряда батареи вашего устройства составляет 78%, то он покажет 75%.

если вам нужна точная индикация уровня заряда батареи, вы можете перейти по этой ссылке: http://blog.coriolis.ch/2009/02/14/reading-the-battery-level-programmatically/

person Ankush    schedule 21.05.2015