2015-05-21 4 views
5

Всегда [myDevice batteryLevel] возврат -1 и [myDevice batterystate] возврат 0 (ввод в случай по умолчанию).Как правильно установить уровень заряда батареи и состояние батареи?

Как я могу получить правильные значения? Может ли кто-нибудь помочь мне решить эту проблему? .Below - мой код. (Всегда печатать батареюLeft как «-100%» и статус батареи как «Неизвестно»).

Код:

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"); 
     [email protected]"UnPlugged"; 
     break; 
    } 
    case UIDeviceBatteryStateCharging: 
    { 
     NSLog(@"ChargingKey"); 
     [email protected]"Charging"; 
     break; 
    } 
    case UIDeviceBatteryStateFull: 
    { 
     NSLog(@"FullKey"); 
     [email protected]"BatteryFul"; 
     break; 
    } 

default: 
{ 
    NSLog(@"UnknownKey"); 
    [email protected]"Unknown"; 
    break; 
} 
} 
NSLog(@"Battery status:%@",status_str); 
+4

Вы тестирование на устройстве или тренажере? тестирование на симуляторе даст вам результат, который вы получаете сейчас. :-) –

ответ

8

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

-(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); 
} 

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

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

+0

Как этот код отличается от того, что уже есть в вопросе? Пожалуйста, объясните, как это решает проблему. – rmaddy

+0

вы правы, я собираюсь сейчас отредактировать свой пост –

3

Я надеюсь, что вы не проверить его на тренажере :)

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

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

Смежные вопросы