L'estimation du niveau de la batterie est généralement effectuée par une puce spéciale "jauge à carburant" ; différents modèles de téléphones utilisent différentes puces. Par exemple, le Samsung GT-I8150 (Galaxy W), d'après la Configuration du noyau utilise le Maxim MAX17043 qui, selon sa fiche technique Il n'a pas d'entrée pour mesurer le courant, mais seulement un capteur de tension de la batterie. Selon la description du fabricant, cette puce utilise "un schéma sophistiqué de modélisation de la batterie Li+, appelé ModelGauge™ pour suivre l'état de charge relatif de la batterie (SOC) en continu sur un profil de charge/décharge très variable". Certaines informations sont disponibles dans la fiche technique, mais les détails de ce schéma "ModelGauge" ne semblent pas être disponibles publiquement.
BTW, le pilote utilisé pour le Samsung Galaxy W semble appliquer quelques corrections au niveau de charge renvoyé par la puce MAX17043, donc l'estimation effectuée par la puce n'est probablement pas idéale.
D'autres puces de jauge de carburant (par exemple, MAX17047 ) mesurent à la fois la tension et le courant, et parfois aussi la température de la batterie. De telles puces peuvent probablement fournir une estimation plus précise du niveau de charge de la batterie. Encore une fois, les fiche technique ne fournit pas tous les détails de la méthode utilisée.
Cependant, même si la puce de la jauge de carburant utilisée dans un téléphone particulier peut mesurer le courant, l'accès à cette information depuis Android peut être impossible pour plusieurs raisons :
-
La puce pourrait simplement utiliser la mesure du courant en interne et ne pas l'exposer à l'extérieur. Ce n'est pas le cas du MAX17047 - il possède des registres contenant les valeurs de mesure du courant, qui peuvent être lues sur le bus I2C.
-
Le pilote du noyau pour la puce de la jauge de carburant peut ne pas avoir de code pour exposer les informations de mesure actuelles aux applications utilisateur.
-
Même si le pilote du noyau met à disposition les informations relatives à la mesure actuelle (par exemple, par le biais d'un fichier sysfs), Android ne dispose pas d'une API standard pour de tels capteurs - ni BatteryManager ni Capteur n'ont rien d'approprié pour un capteur de courant électrique. Par conséquent, l'application CurrentWidget que vous avez trouvée ne peut fonctionner que sur certains modèles pour lesquels le développeur dispose d'informations sur l'accès à ce capteur non standard.