2015-05-21 14 views
5

Sempre [myDevice batteryLevel] restituendo -1 e [myDevice batterystate] restituendo 0 (inserendo nel caso Predefinito).Come ottenere il corretto livello della batteria e lo stato della batteria-ios?

Come posso ottenere i valori corretti? .Come chiunque mi aiuti a risolvere questo? .Below è il mio codice. (Stampa sempre BatteryLeft come "-100%" e Stato batteria come "Sconosciuto").

Codice:

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

Stai test su dispositivo o simulatore? test sul simulatore ti darà l'output che stai ottenendo ora. :-) –

risposta

8

Il codice sembra essere ok, è la stessa che ho usato in uno dei miei app:

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

il problema può essere che di provare questo in il simulatore, dove non può funzionare.

Prova su un dispositivo reale.

+0

In che modo questo codice è diverso da quello che è già presente nella domanda? Per favore spiega come questo risolve il problema. – rmaddy

+0

hai ragione, ho intenzione di modificare ora il mio post –

3

Spero che non sta verificando sul vostro simulatore :)

Non si ottiene il livello della batteria esatto del dispositivo, la sua sempre in multipli di 0,05. Ciò significa che se il livello della batteria del dispositivo è 78%, verrà visualizzato il 75%.

se si desidera l'indicazione del livello della batteria esatto allora si può seguire questo link: http://blog.coriolis.ch/2009/02/14/reading-the-battery-level-programmatically/