Piszę prostą aplikację zawierającą dwa elementy - Service and Activity. Aktywność jest używana tylko do rozpoczynania i zatrzymywania usługi. Serwis używa numeru PhoneStateListener
, aby uzyskać informacje o bieżącym CellID, LAC i RSSI (siła sygnału) i zalogować je do pliku.PhoneStateListener onSignalStrengthsChanged przestaje być wywoływany w Service
Wszystko działa dobrze, gdy telefon nie śpi. Zauważyłem, że po wyłączeniu ekranu i kilku minutach bezczynności mój PhoneStateListener
nie jest już wywoływany. Próbowałem dodać PARTIAL_WAKE_LOCK (i inne typy blokad) do mojej usługi, ale myślę, że powoduje to poważne wyczerpanie baterii i nie powinno być używane w ten sposób. Z drugiej strony jednak nie pomogło mi to. Moją kolejną próbą było użycie Timera i wyrejestrować/zarejestrować moje PhoneStateListener
w określonych odstępach czasu. Niespodziewanie wygląda na to, że w ten sposób pomógł w odświeżeniu CellId i LAC (domyślam się, że został nazwany onCellLocationChanged()
od mojego słuchacza), ale siła sygnału wciąż nie była aktualizowana.
Nie próbowałem używać BroadcastReciever
, ale po pewnym zagłębieniu się w temat i przeczytaniu wątków na SO nie sądzę, by to działało dla mnie.
Podsumowując, moje pytanie: Dlaczego metody PhoneStateListener
nie są wywoływane, gdy telefon jest w trybie uśpienia? Czy jest jakikolwiek sposób (np. Wymuszenie użycia telefonu lub użycie innego mechanizmu) w celu skutecznego przezwyciężenia tego zachowania?
'Niespodziewanie, to wygląda, że w ten sposób pomógł .. . "Nie jest to pewne, że jest to nieoczekiwanie dokumentacja dotycząca notatek odsłuchowych" Podczas rejestracji i kiedy zmienia się określony stan telefonii, menedżer telefonii i nvokes odpowiednią metodę wywołania zwrotnego. " – tidbeck