У нас есть собственное Android-приложение, которое представляет собой миграцию уже существующего JME-приложения. Возникла проблема, когда пользователи на местах жаловались на то, что приложение разряжало батарею устройства, когда оно пыталось отправить данные при низком уровне сигнала (это обычное поведение на мобильных устройствах, а не наша непосредственная проблема)
Данные необходимо отправлять быстро, но не сразу, поэтому перед отправкой данных мы проверили уровень сигнала. В этой проверке использовались обратные вызовы PhoneStateListener
и onSignalStrengthsChanged(SignalStrength signalStrength)
, как рекомендовано многими аналогичными вопросами и статьями SO в других местах.
Это прекрасно работает на моем телефоне (работает на Telstra Australia), а SignalStrength .getGsmSignalStrength () возвращает значение от 0-31
, как и ожидалось. Однако на телефоне, работающем в другой сети (Optus Australia), он сообщает, что GSM имеет значение true, но возвращает 99 (т. Е. Код ошибки) при определении уровня сигнала. Я считаю, что это по-прежнему правильное поведение, поскольку GSM - это данные 2G, и именно 3G UMTS / HSPA следует проверить. UMTS / HSPA - это сеть, о которой сообщает приложение Elixir
на телефоне, как и ожидалось. У нас также есть неподтвержденные сообщения о том, что моя сеть (Telstra Australia) сообщает о недостаточной силе GSM для отправки данных из приложения, но может просматривать Интернет и выполнять другие операции с данными без проблем. Это заставляет меня верить, что сила GSM в любом случае не подходит для проверки.
Я выполняю тесты на других телефонах Android в той же сети (все еще пытаюсь получить доступ к некоторым устройствам), но вполне возможно, что мы можем просматривать Интернет и отправлять (HTTP) данные из нашего приложения , он просто потерпит неудачу, если мы проверим уровень сигнала и всегда получим «99». На Optus SignalStrength.toString () всегда возвращает 99 -1 -1 -1 -1 -1 -1 gsm 3
после нескольких дней тестирования против нескольких башен.
Самым близким (без ответа) потоком SO является следующий: Получение RSCP и Ec / Io уровня сигнала с телефона, обслуживаемого сетью HSPA
В итоге:
- Telstra Connection сообщает, что GSM имеет значение true и возвращает полезный уровень сигнала
- Соединение Optus сообщает об истинном GSM, но всегда сообщает '99'
- Возможно, GSM в любом случае не подходит для проверки, нам нужно попытаться получить ' фактическую мощность сети передачи данных '