2012-08-04 16 views
15

estoy usando esta función para obtener el nivel actual de la batería del dispositivo:Cómo obtener el nivel de la batería en tiempo real en IOS con una granularidad de 1%

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

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

pero el resultado tiene una granularidad 5%. Ejemplo: cuando la batería del teléfono está al 88%, solo registra un valor de 0,85. batteryLevel solo devuelve valores en incrementos de 0.05. Por ejemplo: 0.85, 0.9, 0.95 y nunca devuelve valores como 0.82 o 0.83.

¿Hay alguna solución para obtener un porcentaje con una mayor precisión?

+0

para el registro: acabo de comprobar su código con el iPhone 6 Plus y sí muestra todos los niveles escalares , como 0.49, etc. – brainray

Respuesta

10

la salida en este sitio: Reading the battery level programmatically

pero, USO. todas las API utilizadas aquí no están documentadas en el iPhone, y probablemente lleven a un rechazo si envía esta aplicación a la tienda de aplicaciones. Aunque el estado de carga de la batería no es exactamente, recomendaría utilizar los métodos de supervisión de la batería UIDevice.

+0

Gracias por su enlace. Lo he comprobado. Vi esta línea: "¡No olvides quitar los encabezados y libIOKit.A.dylib de tu código antes de enviar!", ¿Significaba que, una vez hecho esto, puedo eliminar libIOKit.A.dylib y eliminar los encabezados de mi código para subir a la tienda de Apple? – 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

Su primera línea es superflua ya que hace exactamente lo mismo en la tercera línea de código. –

32

Hay al menos cuatro formas diferentes de leer el nivel de la batería, y las cuatro formas pueden devolver valores diferentes.

Aquí hay una tabla de estos valores a través del tiempo.

Los valores se registraron con este proyecto IOS: https://github.com/nst/BatteryChart

Por favor, compruebe el código de referencia.

iPhone 5 Battery

+0

¿Esta aplicación sigue ejecutándose y presenta porcentajes en segundo plano? ¿O simplemente dejas la aplicación en funcionamiento? – simonthumper

-1

Las respuestas anteriores son muy buenos, pero todos ellos están en Obj-C, he utilizado estos con otros ejemplos para hacer la misma tarea en MonoTouch, así que estoy poniendo mi código aquí por si alguien lo necesita:

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

también tengo un post completo en mi blog para dar todos los detalles en here

Cuestiones relacionadas