Android BatteryManager Alternativen

8

Ich versuche Batteriestatistiken in meiner Anwendung für ein Benchmarking zu bekommen. Der wunderbare BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER lässt mich die Micro-Amps des Geräts abfragen, was großartig ist. Dies wurde jedoch nur in API 21 eingeführt, sodass die Anzahl der erreichbaren Geräte sehr begrenzt ist. Gibt es eine kompatible Möglichkeit, etwas Ähnliches in niedrigeren Versionen der APIs (bis zu 4.0) zu tun? Ich weiß BatteryManager.EXTRA_LEVEL wird mir den Prozentsatz geben, aber das ist wirklich nicht feinkörnig.

    
David M 09.06.2015, 14:31
quelle

3 Antworten

11

Soweit ich weiß, können Sie das mit älteren öffentlichen APIs nicht tun. Ich arbeitete an einer App auf Systemebene, die einem Benutzer Batteriestatus anzeigt. Ich habe meinen Code aus der App "Android-Einstellungen" erstellt, und meine Nutzer benötigen möglicherweise Root-Zugriff oder die App muss mit dem Plattform-Schlüssel signiert sein. Sie können PowerUsageDetail , BatteryInfo und PowerUsageSummary Klassen. Wenn Sie Glück haben, erhalten Sie möglicherweise Zugriff auf versteckte APIs mit JAVA-Reflektion. Andernfalls benötigen Sie Plattformschlüssel oder Root. Die internen APIs ändern sich sehr oft, so dass es ziemlich mühsam ist, sie zu verwenden.

Es gibt auch ein paar Tools, die Sie vielleicht auschecken möchten:

  • adb shell dumpsys Batteriestatus
  • adb shell dumpsys Batterieinfo
  • Batteriehistoriker
  • adb shell bugreport

Dumpsys-Quellcode

Viel Glück!

Bearbeiten:

Mein altes Projekt könnte für Sie nützlich sein.

    
pt2121 28.07.2015, 00:14
quelle
4

Anfang dieses Jahres stieß ich auf einen interessanten Artikel über eine Methode, um Smartphones zu finden, die nur auf dem Stromverbrauch des Geräts basieren, genannt PowerSpy .

Obwohl ich die Methode nie selbst implementiert / getestet habe, behaupten die Autoren:

  

Beim Lesen von Android wird der aggregierte Leistungsmesser des Telefons wiederholt, indem die folgenden zwei Dateien wiederholt gelesen werden:
/sys/class/power_supply/battery/voltage_now
/sys/class/power_supply/battery/current_now .

Sie behaupten auch, die Methode auf Nexus 4, Nexus 5 und HTC getestet zu haben. Das ist zwar nicht so genau, mit welchen genauen Versionen von Android die Geräte ausgestattet waren, aber Nexus 4 soll mit API Level 17 und Nexus 5 mit API Level 19 kommen, aber beide Telefone scheinen OS Upgrades zu unterliegen.

Dies scheint jedoch eine radikal andere Methode zu sein als die, die von den anderen Plakaten erwähnt wurden, was wahrscheinlich erwähnenswert ist. Leider scheint es sich um einen Low-Level-Ansatz zu handeln, so dass eine Menge Arbeit benötigt wird, um das zu bekommen, was Sie brauchen, da Energie, wie in der Physik, nicht wirklich Batterieverbrauch bedeutet. Aber vielleicht brauchst du es so.

Als Letztes erwähnte der Artikel, dass der Zugriff auf die beiden Dateien keine speziellen Berechtigungen erfordert (was die Art der Studie motiviert hat, die sie in erster Linie unternommen haben).

BEARBEITEN

Zweiter Gedanke: Wenn Sie P=U*I plotten (wie oben erwähnt, U und I erhalten) und im Laufe der Zeit integrieren (das wäre eine Summe in diesem diskreten Fall), erhalten Sie vielleicht eine sehr gute Annäherung an den Batterieverbrauch. Vielleicht berücksichtigen Sie auch einen Kalman-Filter (um das Rauschen von U und I abzuschwächen, wenn Sie bedenken, dass Ihre Algorithmen nicht der einzige Verbraucher sind) und Sie bekommen vielleicht genau das, was Sie wollen.

    
cobarzan 31.07.2015 13:17
quelle
0

Wie im Batterieüberwachungstraining Ссылка können Sie die aktuelle Version abrufen Batterieinformationen mit:

%Vor%

Beachten Sie, dass Sie diesen Anruf wiederholt aufrufen müssen, um den aktualisierten Akkustand zu erhalten. Wenn du deine App aufweckst und die Batterie selbst aktivierst, empfehlen sie:

    
kuljeet singh 30.07.2015 06:51
quelle