La estimación del nivel de la batería suele realizarse mediante un chip especial de "indicador de combustible"; los distintos modelos de teléfono utilizan diferentes chips. Por ejemplo, el Samsung GT-I8150 (Galaxy W), según el configuración del núcleo utiliza el Maxim MAX17043 chip, que, según su ficha técnica no tiene ninguna entrada para medir la corriente, sólo tiene un sensor de tensión de la batería. Según la descripción del fabricante, este chip utiliza "un sofisticado esquema de modelado de baterías de Li+, llamado ModelGauge™, para hacer un seguimiento continuo del estado de carga (SOC) relativo de la batería a lo largo de un perfil de carga/descarga muy variable". En la hoja de datos hay algo de información, pero los detalles de este esquema "ModelGauge" no parecen estar disponibles públicamente.
Por cierto, el controlador utilizado para el Samsung Galaxy W parece aplicar algunas correcciones al nivel de carga devuelto por el chip MAX17043, por lo que probablemente la estimación realizada por el chip no es ideal.
Otros chips para medir el combustible (p. ej, MAX17047 ) miden tanto la tensión como la corriente, y a veces también la temperatura de la batería. Estos chips probablemente pueden proporcionar una estimación más precisa del nivel de carga de la batería. De nuevo, el hoja de datos no proporciona todos los detalles del método utilizado.
Sin embargo, aunque el chip indicador de combustible utilizado en un teléfono concreto pueda medir la corriente, acceder a esa información desde Android podría ser imposible por varias razones:
-
Es posible que el chip sólo utilice la medición de la corriente internamente y no la exponga al exterior. Este no es el caso del MAX17047 - tiene registros que mantienen los valores de medición de la corriente, que pueden ser leídos a través del bus I2C.
-
El controlador del núcleo para el chip del medidor de combustible podría no tener código para exponer la información de la medición actual a las aplicaciones del usuario.
-
Incluso si el controlador del kernel hace que la información de medición actual esté disponible (por ejemplo, a través de algún archivo sysfs), Android no tiene una API estándar para tales sensores - ni BatteryManager ni Sensor tienen algo apropiado para un sensor de corriente eléctrica. Por lo tanto, la aplicación CurrentWidget que has encontrado puede funcionar sólo en algunos modelos para los que el desarrollador tiene información sobre el acceso a este sensor no estándar.