2012-08-04 12 views
15

sto usando questa funzione per ottenere il livello attuale della batteria del dispositivo:Come ottenere il livello della batteria in tempo reale su iOS con una granularità 1%

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; 
UIDevice *myDevice = [UIDevice currentDevice]; 

[myDevice setBatteryMonitoringEnabled:YES]; 
double batLeft = (float)[myDevice batteryLevel]; 
NSLog(@"%f",batLeft); 

ma il risultato ha una granularità 5%. Esempio: quando la batteria del telefono è all'88%, registra solo un valore di 0,85. batteryLevel restituisce solo i valori con incrementi di 0.05. Ad esempio: 0,85, 0,9, 0,95 e non restituisce mai valori come 0,82 o 0,83.

Esiste una soluzione per ottenere una percentuale con una precisione maggiore?

+0

per la cronaca: ho appena controllare il codice con l'iPhone 6 Plus e Mostrano tutti i livelli scalari , come 0.49 ecc. – brainray

risposta

10

visitate questo sito: Reading the battery level programmatically

ma, utilizzare con attenzione. tutte le API utilizzate qui non sono documentate su iPhone e probabilmente porteranno a un rifiuto se invii questa applicazione all'App Store. Sebbene lo stato di carica della batteria non sia esattamente, mi consiglia di utilizzare i metodi di monitoraggio della batteria UIDevice.

+0

Grazie per il tuo link. L'ho verificato Ho visto questa riga: "Non dimenticare di rimuovere le intestazioni e libIOKit.A.dylib dal tuo codice prima della spedizione!", Significava dopo averlo fatto, posso rimuovere libIOKit.A.dylib e rimuovere le intestazioni dal mio codice a caricare su Apple Store? – cat

2
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; 
UIDevice *myDevice = [UIDevice currentDevice]; 

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


NSString * levelLabel = [NSString stringWithFormat:@"%.f%%", batLeft]; 


lblLevel.text = levelLabel; 
+1

La prima riga è superflua poiché si fa esattamente la stessa cosa sulla terza riga di codice. –

32

Ci sono almeno quattro modi diversi per leggere il livello della batteria, e tutti e quattro i modi possono restituire valori diversi.

Ecco un grafico di questi valori nel tempo.

I valori sono stati registrati con questo progetto iOS: https://github.com/nst/BatteryChart

Si prega di controllare il codice di riferimento.

iPhone 5 Battery

+0

Questa app rimane in esecuzione e riporta percentuali in background? O lasci semplicemente l'applicazione in esecuzione? – simonthumper

-1

Le risposte di cui sopra sono molto buoni, ma sono tutti in Obj-C, ho usato questi con altri esempi per fare la stessa operazione su MonoTouch, quindi sto mettendo il mio codice qui nel caso qualcuno ne ha bisogno:

try 
{ 
    UIDevice.CurrentDevice.BatteryMonitoringEnabled = true; 
    _Battery.Level = (int)(UIDevice.CurrentDevice.BatteryLevel * IOSBatteryLevelScalingFactor); 
    _Battery.State = UIDevice.CurrentDevice.BatteryState; 
} 
catch (Exception e) 
{ 
    ExceptionHandler.HandleException(e, "BatteryState.Update"); 
    throw new BatteryUpdateException(); 
} 
finally 
{ 
    UIDevice.CurrentDevice.BatteryMonitoringEnabled = false; 
} 

ho anche un intero post sul mio blog per dare tutti i dettagli in here

Problemi correlati