Обнаружение сетевого подключения на Android? - PullRequest
0 голосов
/ 23 февраля 2011

ОС: Android

Дано: пользователь заявил, что он хочет оставаться подключенным к серверу приложения для получения обновлений и т. Д.

Цель: обеспечить подключение пользователей к серверу приложения, даже если приложение находится в фоновом режиме.

Вопрос. Одной из проблем было случайное отключение от сети. Если пользователь теряет подключение к сети передачи данных (потеря 2G, 3G, WiFi), а затем восстанавливает подключение, наше приложение остается без подключения. В настоящее время я пытаюсь использовать PhoneStateListener, чтобы обнаружить различные изменения в сети и, таким образом, перезапустить соединение с сервером при необходимости. На моем Nexus One (2.1) я обнаружил, что onSignalStrengthsChanged и onDataConnectionStateChanged не вызываются, за исключением случаев, когда слушатели изначально зарегистрированы, но не после. Слушатели регистрируются внутри Службы, поэтому они непрерывно слушают, пока Служба жива (что мы можем считать «навсегда» для целей этого вопроса). У кого-нибудь еще были проблемы с прослушиванием состояния соединения данных?

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

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

Поскольку StackOverflow не позволяет мне закрыть вопрос в противном случае, я предоставлю ответ, почему мои PhoneStateListeners не работают:

Я обнаружил, что моей проблемой было просто то, что я не регистрировал своих слушателей.поразрядно, но довольно последовательно (то есть
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);<br> telephonyManager.listen(listener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);<br> .<br> .<br> .
вместо (правильного):
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE..............);)

Я закрою этот вопрос и, возможно, позже открою другойвопрос о предложении дизайна по поддержанию «всегда живых» подключений к серверу на Android.Благодаря.

2 голосов
/ 23 февраля 2011

Полагаю, вам придется регулярно отправлять сообщения keepalive, чтобы проверить, установлено ли соединение. Если нет, восстановите его. Существует множество причин, по которым ваше соединение может разорваться, и вы не сможете проверить все эти клиентские части.

Возможно, стоит подумать об использовании облачного сервиса Google для ваших действий, поскольку они уже поддерживают открытое соединение для этого. Таким образом, телефоны вашего пользователя не будут иметь лишних затрат на поддержание еще одного соединения (что может быть довольно дорогим)

0 голосов
/ 22 апреля 2011

Я думаю, вы бы использовали для этого ConnectivityManager.

Класс, отвечающий на запросы о состоянии сетевого подключения. Он также уведомляет приложения об изменении сетевого подключения. Получить экземпляр этого класса, вызвав Context.getSystemService (Context.CONNECTIVITY_SERVICE).

http://developer.android.com/reference/android/net/ConnectivityManager.html

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

0 голосов
/ 23 февраля 2011

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

А также не забудьте получить TelephonyManager надлежащим образом

TelephonyManager mTelephonyMgr = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE); 
...