Uno de los mayores problemas de los usuarios móviles en la actualidad es la duración de la batería. Si eres un usuario muy activo del móvil (y hoy en día casi todos lo somos), es muy fácil que a partir de cierta hora del día vayamos ya muy "pillados" con la batería que nos queda. Es por esto que los sistemas operativos móviles modernos incluyen un modo especial de ahorro de energía (cada uno le llama de una forma diferente) que nos permite limitar el consumo de energía y mantenerlo al mínimo cuando vamos muy apurados.
En el caso de los iPhone, con iOS 9 se introdujo un nuevo modo llamado "de bajo consumo" que se intenta activar automáticamente cuando la carga de tu batería llega al 20% (como en los Windows Phone, que lo tenían antes). También se puede activar manualmente yendo a los ajustes de batería del teléfono:
Al hacerlo, el icono de la batería cambia a color amarillo, el brillo de la pantalla disminuye de intensidad y se apaga antes, y se suspenden muchas tareas en segundo plano para ahorrar batería, como por ejemplo la descarga de correo, el refresco de aplicaciones en segundo plano o el poder decir "Oye Siri" para activar el asistente del teléfono.
Cuando un usuario tiene el teléfono en este modo y está usando nuestra aplicación, deberíamos comportarnos lo mejor posible para tratar de ahorrar energía: verificar la posición menos a menudo (el uso del GPS acaba con la batería), disminuir procesos que usen mucho procesador (como animaciones o efectos físicos), usar menos la red y enviar o traer solamente los datos estrictamente necesarios... Otra gente, como los "aguilillas" de Über, lo usan para ganar más dinero a costa de tu necesidad. Oye, cada uno tiene su ética :-P
El caso es que, sea por un motivo u otro, puede resultar muy interesante saber cómo averiguar si el usuario actual está o no en modo de ahorro de energía, y poder responder ante los cambios en el mismo.
En la API de iOS 9 o posterior existe una función precisamente para esto dentro de la clase NSProcessinfo.
En Swift podemos averiguarlo así:
if NSProcessInfo.processInfo().lowPowerModeEnabled {
//Actuar en consecuencia...
}
Y en Objective-C el equivalente sería:
if ([[NSProcessInfo processInfo] isLowPowerModeEnabled]) {
//Actuar en consecuencia...
}
Si no quieres tener que estar comprobando este estado periódicamente también puedes suscribirte a la notificación del sistema NSProcessInfoPowerStateDidChangeNotification. Gracias a ella podrás enterarte de cuando cambia el modo de energía y actuar en consecuencia.
OJO porque esto no funcionará en versiones de iOS anteriores a la 9, por lo que tendrás que comprobar la disponibilidad de este método si tu app va a funcionar también en versiones antiguas del sistema operativo. Ah, y en iPad no existe este modo energético y, aunque la función trabaja sin problemas, siempre devuelve falso.