2013-04-09 13 views
15

Piszę aplikację, aby ocenić wykonalność sieci Bluetooth P2P na Androida.Jak mogę sprawdzić, ile baterii zużywa moja aplikacja na Androida na urządzenia użytkownika?

Zauważyłem, że na Galaxy Nexusie zużywa bardzo mało baterii, a na Nexusie S bardzo szybko rozładowuje baterię. Jest to bezpośrednio spowodowane wysokim obciążeniem procesora ze względu na Bluetooth.

Teraz chciałbym zebrać informacje o tym, jak bardzo bateria wyczerpuje moją aplikację na urządzeniach, na których jest zainstalowana. Zwykłe rejestrowanie czasu w porównaniu z poziomem naładowania baterii jest bezużyteczne, ponieważ nie wiem, kiedy urządzenie jest w użyciu, a nawet gdybym to zrobił, nie wiedziałbym, czy użytkownik gra w gry 3D, torrentując przez WiFi czy czytając e-booka. przyciemniony ekran.

Aby problem się nie pogorszył, nie wszystkie zużycie baterii spowodowane przez moją aplikację jest przypisane do niego na ekranie baterii - niektóre są na przykład oznaczone jako "Bluetooth" (znowu zależne od urządzenia).

Czy istnieje łatwy, chroniący prywatność sposób uzyskiwania przydatnych informacji na urządzeniach nierootowanych? Urządzenia nie są pod moją kontrolą. Nie mogę po prostu zajrzeć do menu, nie mogę użyć ADB.

+0

Czy potrzebujesz zdalnie informacji o tym urządzeniu? Kiedy mówisz "czas logowania a poziom naładowania baterii", czy mówisz o poziomie naładowania baterii całego telefonu lub baterii zużytej przez aplikację? –

+0

@DeepakBala: Tak, informacje muszą zostać przesłane na serwer gromadzenia danych. Wylogowanie baterii pobranej przez moją aplikację jest tym, co chciałbym zrobić, ale nie znam żadnego API, które by mi na to pozwoliło. Zapisywanie poziomu naładowania baterii telefonu jest łatwe, ale (jak wskazałem) jest bezużyteczne. –

Odpowiedz

1

Android API obecnie nie obsługuje tego. Jedyny numer available documentation opisuje sposób korzystania z transmisji BatteryManager, która zapewnia tylko ogólny poziom naładowania baterii i brak szczegółów dotyczących poszczególnych aplikacji.

Przypuszczam, że nawet jeśli istnieją nieudokumentowane sposoby naśladowania tego, co pokazuje menedżer baterii System Settings, będą wymagały ukorzenienia.

1

AFAIK nie ma sposobu, aby to zrobić. Najbliżej można to zrobić, podłączając urządzenie do narzędzia monitorującego, takiego jak little eye labs, które pobiera z akumulatora energię zużywaną przez aplikację na wykresie. Obsługuje także kluczowe zdarzenia z życia aplikacji, takie jak włączanie WIFI/bluetooth itp.

Nie można tego zrobić zdalnie, ale można uzyskać dane na własnych urządzeniach testowych.

+0

Brak akceptacji kolejnych zapisów po akwizycji fb. Czy znasz jakieś inne tego typu narzędzia? Czy korzystałeś z małych laboratoriów do badania wzroku? –

+0

Użyłem małych laboratoriów do oczu dla aplikacji, którą napisałem dawno temu. Od tego czasu nie odczuwałem potrzeby czegoś podobnego. Konstrukcja lollipop na Androida oferuje [nowe narzędzie do wykrywania zużycia baterii] (http://developer.android.com/about/versions/lollipop.html#Battery). Nie miałem jednak okazji tego użyć. –

+0

Cool. Dzięki! Mam aplikację, która korzysta z wielu czujników, więc szukałem sposobu, aby dowiedzieć się rozkład zużycia baterii w rzeczywistych wartościach, a nie tylko%. Spróbuję historyka baterii. Twoje zdrowie! –

1

To podejście jest dość brutalne, ale może pomóc. Możesz używać istniejących transmisji BatteryManager do śledzenia zmian ogólnego poziomu naładowania baterii , gdy Twoja aplikacja jest aktywna.

Znajomość aktywności aplikacji jest osobnym zagadnieniem. Jeśli twoja aplikacja składa się wyłącznie z działań, możesz uzyskać dobre wyniki, zaczynając śledzenie, gdy wywoływana jest jakakolwiek metoda z Twoich działań, onResume(), i zatrzymując śledzenie w onPause(). Jeśli możesz mieć wszystkie swoje Aktywności wywodzące się z jednej podstawowej klasy Aktywności, to jest to całkiem proste. Aby uzyskać wskazówki dotyczące śledzenia tego problemu, patrz How to detect when an Android app goes to the background and come back to the foreground.

Jeśli twoja aplikacja jest bardziej skomplikowana, a inteligentne rzeczy zdarzają się w dłuższym komponencie, takim jak usługa, wtedy jest o wiele trudniej.

To jest prymitywne, ale przynajmniej pomogłoby to w odróżnieniu "grania w gry 3D" od "korzystania z mojej aplikacji".

+0

Niestety, mniej więcej cała aplikacja jest usługą w tle. –

+0

Tak więc przyrządź główną usługę w tle w sposób sugerowany dla działań. Musisz wiedzieć, że masz aktywną technologię Bluetooth? Jeśli chodzi o gromadzenie danych, możesz zajrzeć do jednego z pakietów analitycznych. Mam coś podobnego, używając Flurry i moich własnych zdarzeń jako zaplecza. – Ifor

+0

@Ifor: Instrumentowanie usługi w tle nie pomoże mi odróżnić "wyczerpania baterii, ponieważ używam bluetooth" i "wyczerpywania baterii, ponieważ użytkownik odtwarza gry 3D na pierwszym planie, podczas gdy ja używam bluetooth". –

Powiązane problemy