Diese Akkuanzeigen sind generell nur Schätzwerte. Es ist ziemlich schwierig bis unmöglich den exakten Ladestand eines Akkus zu bestimmen. Der englische Ausdruck für den Ladestand ist "State of Charge", mit "SoC" etwas unglücklich abgekürzt, da das in unserem Bereich meistens für "System on Chip" steht (der Hauptchip, der CPU, GPU und mehr enthält).
Hier und
hier gibt es Details zum Thema.
Grundsätzlich werden Akkus auf Lithium-Ionen-Basis (dazu zählt auch Lithium-Polymer) auf eine Zellenspannung von 4,2V aufgeladen. Dann sind sie "100%" voll. Das ist aber mehr oder weniger willkürlich. Ein Kompromiss aus Zyklenfestigkeit/Langlebigkeit des Akkus und der nutzbaren Kapazität. Ähnliches gilt für den "0%" / leer Zustand. Da wird oft einfach ein Wert um die 3,5V herum als Abschaltpunkt definiert, auch wenn der Akku dann noch längst nicht leer ist. Das hat teils mit Schutz vor Tiefentladung zu tun (die aber erst unter 3,2V oder sogar 3,0V eintritt), aber auch mit der Stromversorgung der Hardwarekomponenten. Verschiedene Bauteile arbeiten mit verschiedenen Spannung, die CPU z.B. bekommt 1,2V (oder weniger), der DDR3 Arbeitsspeicher 1,5V und manche Komponenten brauchen 3,3V. Diese individuellen Spannungen werden alle aus der Akkuspannung abgeleitet, über spezielle Spannungsregler. Dieser Vorgang geht aber immer mit einem gewissen Spannungsverlust einher (drop-out), d.h. man braucht einen "Sicherheitsabstand" nach oben. Beispiel: möchte man 3,3V aus einer höheren Spannung erzeugen und hat der Spannunsregler einen Drop-out-Wert von 0,2V, dann braucht man am Eingang mindestens 3,5V.
So, jetzt wissen wir, dass 4,2V "100%" entspricht und z.B. 3,5V "0%". Wie sieht's dazwischen aus? Die Akkuspannung ist leider nicht proportional zum Ladestand. Also der Mittelwert von 4,2V und 3,5V, nämlich 3,85V, entspricht
nicht "50%". Dazu kommt, dass die Akkuspannung unter höheren Stromstärken (z.B. Last durch anspruchsvolles Spiel) einbrechen kann und sich danach im Leerlauf wieder etwas "erholt". Wenn man also den Ladestand versucht über die Akkuspannung zu ermitteln, kann es unter solchen Umständen dazu kommen, dass der Prozentwert sich "magisch" ein bisschen erhöht obwohl kein Ladegerät angeschlossen wurde. Das möchte man natürlich nicht. Eine perfekte Ladestandanzeige geht beim Entladen immer nur abwärts.
Wie ermittelt man den Ladestand dann? Üblicherweise mit einer Mischung aus dieser unzuverlässigen Spannungsmethode und "Coulomb Counting". Coulomb ist die Einheit der elektrischen Ladung. Die Power Management Unit (PMU), normalerweise ein separater Chip, der sich um Laden/Entladen des Akkus und die oben erwähnte Stromversorgung und Spannungsregelung kümmert, misst dabei periodisch die Stromstärke am Akku, z.B. 100 mal pro Sekunde. Über diese Messwerte kann dann integriert werden, um die Anzahl der Coulombs zu schätzen, die den Akku betreten (laden) und verlassen (entladen). Auch diese Methode ist nicht perfekt, denn die abgetasteten Stromstärkewerte sind bereits ungenau und nicht alle Coulombs, die beim Laden den Akku betreten haben, sind dann auch wieder zum Entladen verfügbar. Das "Kalibrieren" eines Akkus durch "vollständiges" (bis zum Abschalten) Entladen des Akkus mit folgenden, ununterbrochenen Laden bis 100% hat übrigens genau den Zweck, diese Coulombzähler wieder zurückzusetzen.
Die Ladestandanzeige in Android kommt vom Linux-Kernel, genauer gesagt dem PMU-Treiber im Linux-Kernel (der stellt unter /sys/class/power_supply/battery oder in anderen Unterverzeichnissen von
/sys/class/power_supply/ einige Werte bereit). Der Prozentwert, den Android anzeigt, hat also nicht wirklich etwas mit Android zu tun, sondern ist hochgradig hardwareabhängig. Es gibt jede Menge verschiedene Hersteller und Modelle von PMU-Chips. Manche PMUs haben bereits in Hardware eine Berechnung des Ladestands integriert, andere stellen vielleicht nur Coulombzähler und Spannung bereit und überlassen das Berechnen des Prozentwerts dem Treiber. Ich habe auch schon den Fall gesehen, dass die PMU einen Ladestandwert bereitstellt, der Treiber aber trotzdem seine eigenen Berechnungen durchführt; die beiden Werte lagen dabei um bis zu 10% auseinander. Vielleicht meinten die Treiberprogrammierer, der eingebaute Wert wäre zu ungenau und sie könnten es besser.
Genau da ist jedenfalls das Problem zu suchen, wenn man ein Android-Gerät hat, bei dem die Akkuanzeige spinnt. Entweder ist der von der PMU bereitgestellte Wert fehlerhaft, oder was wahrscheinlicher ist, der PMU-Treiber benutzt seine eigenen Algorithmen und die haben eben Bugs. Der Akku an sich spielt natürlich auch eine gewisse Rolle. Ältere, schon abgenutzte Akkus, haben natürlich weniger Kapazität und auch ein anderes Spannungsverhalten. Gute Algorithmen müssen das kompensieren. Wie gesagt, es ist schwierig, den Ladestand eines Akkus zu bestimmen.
Und weil wir gerade dabei sind: wegen der erwähnten Modellvielfalt an PMUs bringen Android-Apps zur Akkukalibrierung nichts, es sei denn sie sind auf ein spezifisches Gerät zugeschnitten. Diese "Battery Calibration" Apps löschen gewöhnlich nur die Android-Datei, die Verbrauchsstatistiken enthält - sinnlos.