2010-01-06 15 views
5

Escribo una aplicación para Android que recopila las intensidades de la señal celular. Tengo problemas para obtener la intensidad de la señal de la celda "actual", pero no tengo ningún problema para obtener las intensidades de la señal de celda "vecina".Android: ¿Por qué los métodos para obtener las intensidades de la señal de la celda vecina son mejores que los de la intensidad de la señal de la celda actual?

Para obtener la intensidad de la señal de la celda actual, creé un PhoneStateListener e implementé la devolución de llamada onSignalStrengthChanged. Funciona, pero no muy bien. Parece que la intensidad de la señal casi nunca cambia, y la resolución salta a solo unos pocos números. Aceptaría la respuesta de que la resolución del hardware de intensidad de la señal es aproximada, pero cuando uso el método getNeighboringCellInfo() de TelephonyManager, funciona mucho mejor. Las lecturas de intensidad de señal de las celdas vecinas cambian con frecuencia y tienen una resolución mucho mejor.

Entonces, ¿cómo puedo obtener la intensidad de la señal de la celda actual de la misma manera que estoy obteniendo las fortalezas de la celda vecina? Me parece extraño que la funcionalidad de las celdas vecinas sea mejor que la celda actual. ¿Me estoy perdiendo de algo?

También me gustaría llamar directamente a un método del administrador de telefonía para obtener la intensidad de la celda actual, a diferencia de un oyente, si es posible. Si alguien sabe cómo, por favor avíseme. Gracias.

Respuesta

8

Basado en Android 1.5 fuentes se está enviando (BatteryStatsImpl.java) de notificación únicamente si los cambios de señal entre los siguientes estados:

SIGNAL_STRENGTH_NONE_OR_UNKNOWN (99) 
SIGNAL_STRENGTH_GREAT (16-32) 
SIGNAL_STRENGTH_GOOD (8-15) 
SIGNAL_STRENGTH_MODERATE (4-7) 
SIGNAL_STRENGTH_POOR (0-3) 

Así que en su caso los cambios de intensidad de señal dentro de la misma gama y no recibe notificaciones

Supongo que se hace de esta manera para ahorrar batería.

+1

Gran respuesta. Gracias. – Doughy

1

Creo que este método no funciona muy bien porque como está escrito en el javadoc, onSignalStrengthChanged() está en desuso desde la versión 2.0 y reemplazado por onSignalStrengthsChanged() (tenga en cuenta la "s"), pero desafortunadamente este método es privado.

Hay un open issue al respecto, parece que Google ha eliminado el método por razones desconocidas (tal vez porque no funciona bien como lo ha notado), y estará disponible en una próxima versión de SDK.

¡Solo tiene que ser paciente y votar here para acelerar el proceso de desarrollo!

Cuestiones relacionadas