Android: почему методы получения уровней сигнала в соседних ячейках лучше, чем методы для текущего уровня сигнала в ячейке? - PullRequest
5 голосов
/ 06 января 2010

Я пишу приложение для Android, которое собирает значения сигнала сотовой связи. У меня проблемы с получением «текущего» уровня сигнала ячейки, но у меня нет проблем с получением «соседнего» уровня сигнала ячейки.

Чтобы получить текущий уровень сигнала ячейки, я создал PhoneStateListener и реализовал обратный вызов onSignalStrengthChanged. Это работает, но не очень хорошо. Кажется, что уровень сигнала почти никогда не меняется, а разрешение возрастает до нескольких цифр. Я бы принял ответ, что разрешение аппаратного уровня сигнала грубое, но когда я использую метод getNeighboringCellInfo () TelephonyManager, он работает намного лучше. Показания уровня сигнала от соседних ячеек часто меняются, и они имеют намного лучшее разрешение.

Итак, как я могу получить текущий уровень сигнала ячейки так же, как я получаю значения соседних ячеек? Мне кажется странным, что функциональность соседних ячеек лучше, чем текущая ячейка. Я что-то здесь упускаю?

Я также хотел бы напрямую вызвать метод из диспетчера телефонии, чтобы получить текущую мощность ячейки, в отличие от слушателя, если это возможно. Если кто-нибудь знает, как, пожалуйста, дайте мне знать. Спасибо.

Ответы [ 2 ]

8 голосов
/ 15 сентября 2010

На основе источников Android 1.5 (BatteryStatsImpl.java) уведомление отправляется, только если сигнал изменяется между следующими состояниями:

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)

Таким образом, в вашем случае уровень сигнала изменяется в пределах одного и того же диапазона, и вы не получаете уведомления.

Полагаю, это сделано для экономии заряда батареи.

1 голос
/ 06 января 2010

Я думаю, что этот метод работает не очень хорошо, потому что, как написано в javadoc, onSignalStrengthChanged() устарело с api 2.0 и заменено на onSignalStrengthsChanged() (обратите внимание на "s"), но, к сожалению, этот метод является частным!

Существует открытый вопрос об этом, кажется, Google удалил метод по неизвестной причине (возможно, потому что он работает не так, как вы заметили), и он будет доступен в следующем SDK релиз.

Вам просто нужно набраться терпения и проголосовать здесь , чтобы ускорить процесс разработки!

...