Estoy escribiendo una aplicación simple que contiene dos elementos: Servicio y Actividad. La actividad se usa solo para iniciar y detener el servicio. El servicio usa PhoneStateListener
para obtener información sobre CellID actual, LAC y RSSI (intensidad de señal) y registrarlos en un archivo.PhoneStateListener onSignalStrengthsChanged deja de llamarse en el Servicio
Todo funciona bien mientras el teléfono no está durmiendo. Me di cuenta de que después de apagar la pantalla y unos minutos de inactividad, mi PhoneStateListener
ya no se invoca. Traté de agregar PARTIAL_WAKE_LOCK (y otros tipos de bloqueos también) en mi servicio, pero supongo que esto causa un agotamiento severo de la batería y no debería usarse de esa manera. Por otro lado, realmente no me ayudó mucho. Mi otro intento fue usar Timer y anular el registro/registrar mi PhoneStateListener
en intervalos especificados. Inesperadamente, parece que de esta manera ayudó a refrescar CellId y LAC (así que supongo que se llamó onCellLocationChanged()
de mi escucha), pero la intensidad de la señal aún no se actualizaba.
No intenté usar BroadcastReciever
, pero después de profundizar en el tema y leer los hilos en SO, no creo que me funcione.
En resumen, mi pregunta: ¿Por qué los métodos PhoneStateListener
no se llaman cuando el teléfono está en reposo? ¿Hay alguna manera (como forzar el teléfono a despertar o utilizar un mecanismo diferente) para superar este comportamiento de manera eficiente?
'Inesperadamente, se ve que de esta manera ayudó .. .' no estoy seguro de que esto sea inesperadamente como la documentación para escuchar notas 'Al momento del registro, y cuando cambia un estado de telefonía específico, el administrador de telefonía i anula el método de devolución de llamada apropiado'. – tidbeck