2013-04-09 11 views
15

Ich schreibe eine App, um die Machbarkeit eines Bluetooth P2P-Netzwerks auf Android zu bewerten.Wie kann ich herausfinden, wie viel Akku meine Android-App auf den Geräten des Nutzers verbraucht?

Ich bemerkte, dass es auf einem Galaxy Nexus sehr wenig Akku verwendet, während auf einem Nexus S, den Akku sehr schnell ableitet. Dies ist direkt auf eine hohe CPU-Belastung durch Bluetooth zurückzuführen.

Jetzt möchte ich Informationen darüber sammeln, wie viel Batterieverbrauch meine App auf den Geräten verursacht, auf denen sie installiert ist. Es ist nutzlos, die Zeit im Vergleich zum Akkustand zu protokollieren, da ich nicht weiß, wann das Gerät verwendet wird. Selbst wenn ich das protokolliert hätte, würde ich nicht wissen, ob der Benutzer 3D-Spiele spielt, während er über WiFi läuft oder ein eBook liest abgeblendeter Bildschirm

Um das Problem noch schlimmer zu machen, wird nicht alle von meiner App verursachte Akku-Nutzung auf dem Akku-Bildschirm zugeschrieben - einige werden zum Beispiel als "Bluetooth" aufgeführt (wieder geräteabhängig).

Gibt es eine einfache, datenschutzfreundliche Möglichkeit, nützliche Informationen zu nicht gerooteten Geräten zu erhalten? Die Geräte sind nicht unter meiner Kontrolle. Ich kann nicht einfach in das Menü schauen, ich kann ADB nicht benutzen.

+0

Benötigen Sie diese Geräteinformationen aus der Ferne? Wenn Sie "Protokollierungszeit vs. Akkustand" sagen, sprechen Sie über den Akkustand des gesamten Telefons oder die von Ihrer App verbrauchte Batterie? –

+0

@DeepakBala: Ja, die Informationen müssen auf einen Datenerfassungsserver hochgeladen werden. Ich möchte die von meiner App verbrauchte Batterie protokollieren, aber ich kenne keine API, die mir dies erlauben würde. Das Aufzeichnen des Akkuladestands des Telefons ist einfach, aber (wie ich darauf hingewiesen habe) nutzlos. –

Antwort

1

Die Android API unterstützt dies derzeit nicht. Der einzige available documentation ist der, der beschreibt, wie man BatteryManager Broadcasts verwendet, die nur den Gesamtbatterielevel und keine pro Anwendung Details zur Verfügung stellen.

Ich nehme an, dass selbst wenn es undokumentierte Möglichkeiten gibt, zu emulieren, was der Batteriemanager der Systemeinstellungen zeigt, würden sie rooten müssen.

1

AFAIK gibt es keine Möglichkeit, dies zu tun. Am nächsten kommt es, wenn Sie das Gerät an ein Überwachungstool wie little eye labs anschließen, das die von Ihrer App verbrauchte Batterie im Laufe der Zeit in einem Diagramm abbildet. Es unterstützt auch die Markierung wichtiger Ereignisse in der App wie das Einschalten von WIFI/Bluetooth etc.

Es gibt keine Unterstützung, dies remote zu tun, aber Sie können die Daten auf Ihren eigenen Testgeräten erhalten.

+0

Keine weiteren Anmeldungen nach der fb-Erfassung akzeptieren. Würdest du irgendwelche anderen Werkzeuge wie dieses wissen? Hast du kleine Augenlabors benutzt? –

+0

Ich habe kleine Augenlabors für eine App verwendet, die ich vor langer Zeit geschrieben habe. Seither habe ich keine Notwendigkeit für etwas Ähnliches gefunden. Der Android-Lollipop-Build rühmt sich eines [neues Tool zur Erkennung der Akkulaufzeit] (http://developer.android.com/about/versions/lollipop.html#Battery). Ich hatte jedoch keine Gelegenheit, es zu benutzen. –

+0

Kühl. Vielen Dank! Ich habe eine App, die viele Sensoren verwendet, also suchte ich nach einer Möglichkeit, die Verteilung der Batterieauslastung in realen Werten zu ermitteln, nicht nur in%. Ich werde Batteriehistoriker versuchen. Prost! –

1

Dieser Ansatz ist ziemlich grob, aber es kann helfen. Sie können die vorhandenen BatteryManager-Broadcasts verwenden, um Änderungen an der Gesamtbatteriekapazität zu verfolgen , während Ihre App aktiv ist.

Zu wissen, wann Ihre App aktiv ist, ist ein separates Problem. Wenn Ihre App ausschließlich aus Aktivitäten besteht, können Sie gute Ergebnisse erzielen, indem Sie mit dem Tracking beginnen, wenn eine der Methoden Ihrer Aktivitäten onResume() aufgerufen wird, und das Tracking in onPause() stoppen. Wenn Sie alle Ihre Aktivitäten von einer einzelnen Basisaktivitätsklasse ableiten können, ist das ganz einfach. Hinweise dazu, wie Sie dies verfolgen können, finden Sie unter How to detect when an Android app goes to the background and come back to the foreground.

Wenn Ihre App komplexer ist und das intelligente Zeug in einer länger laufenden Komponente wie einem Service auftritt, ist es viel schwieriger.

Dies ist grob, aber es würde Ihnen helfen, "3D-Spiele" von "mit meiner App" zu unterscheiden.

+0

Leider ist mehr oder weniger die gesamte App ein Hintergrunddienst. –

+0

So instrumentieren Sie den Haupthintergrunddienst in der für Aktivitäten vorgeschlagenen Weise. Du musst wissen, dann hast du surreal das Bluetooth aktiv? Um die Daten zu sammeln, können Sie sich eines der Analysepakete ansehen. Ich habe etwas Ähnliches mit Flurry und meinen eigenen Ereignissen als Backend. – Ifor

+0

@Ifor: Das Instrumentieren des Hintergrunddienstes wird mir nicht helfen zu unterscheiden zwischen "Batterieabflüssen, weil ich Bluetooth verwende" und "Batterieabflüsse, weil Benutzer 3D-Spiele im Vordergrund spielt, während ich Bluetooth verwende". –

Verwandte Themen