objective c - poner - Monitoreo de nivel de batería iPhone4 iOS5 ¿Necesito agregar setBatteryMonitoringEnabled: NO a las comprobaciones de batería periódicas?
como poner porcentaje de bateria en iphone 7 (1)
Por lo general, se considera una práctica recomendada evitar el sondeo y, en su lugar, solicitar notificaciones del sistema, de la siguiente manera:
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(batteryLevelUpdate)
name:UIDeviceBatteryLevelDidChangeNotification
object:nil];
... donde el batteryLevelUpdate
se vería así:
- (void)batteryLevelUpdate:(NSNotification *)notification
{
// do whatever, using: [[UIDevice currentDevice] batteryLevel]
}
De la referencia de clase de UIDevice :
Las notificaciones de cambio de nivel de batería se envían con una frecuencia no mayor a una vez por minuto. No intente calcular la tasa de drenaje de la batería o el tiempo restante de la batería; la tasa de drenaje puede cambiar con frecuencia dependiendo de las aplicaciones integradas, así como de su aplicación.
Una vez por minuto es 10 veces más frecuente de lo que su código actualmente está comprobando mientras ejerce mucho menos esfuerzo en relación con la CPU. No menciona, sin embargo, qué granularidad de los cambios provocará notificaciones: ¿se enviará un cambio de 0.01% o requiere un cambio de> 1%?
Para responder a su otra pregunta, si debe configurar setBatteryMonitoringEnabled
nuevamente en NO
: si está utilizando las notificaciones y no está sondeando manualmente para batteryStatus, la respuesta es que debe dejarlo en YES
, o arriesgarse a perder las notificaciones.
El código de muestra BatteryStatus Sample oficial de Apple utiliza esta misma toma de informes de estado de la batería.
También hay una UIDeviceBatteryStateDidChangeNotification
que le notificará cuando un dispositivo se está descargando (en uso), cargando o se ha cargado por completo.
Estoy ejecutando una aplicación que muestrea datos de acelerómetro y giroscopio de la noche a la mañana. Esta es una operación que requiere mucha batería, y me gustaría enseñar a mi aplicación a reconocer cuándo la batería está baja.
Aquí está el código de mi prototipo, que verifica el nivel de la batería cada 10 minutos
NSDate* date = [NSDate date];
if((int)([date timeIntervalSinceReferenceDate])%600 == 0)
{
UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
float batLeft = [myDevice batteryLevel];
int batinfo=(batLeft*100);
[self postStatusMessageWithTitle:nil
description:[NSString stringWithFormat:@"%@ battery level: %i",[dateFormat stringFromDate:dateShow],batinfo]];
[myDevice setBatteryMonitoringEnabled:NO];
}
Mi pregunta es esta: ¿necesito agregar esta línea al final del código?
[myDevice setBatteryMonitoringEnabled:NO];
Parece que la verificación de la batería se realiza allí mismo, no hay llamadas delegadas asíncronas. ¿Establecer el valor en NO producirá ahorros de batería al no tener que monitorear el nivel de la batería durante la noche? ¿Rompo algo configurándolo en NO?
Gracias por cualquier entrada!