Android - Как поддерживать 3g соединение при наличии wifi - PullRequest
0 голосов
/ 08 марта 2012

Мое приложение подключается с постоянным подключением к серверу. Если устройство в настоящее время использует 3G, оно подключится через 3g.
Проблема в том, что если он подключился через 3G и перешел на wifi, соединение обрывается. Как я могу предотвратить его отключение?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Похоже, что сервер не в состоянии разместить клиентов, беспрепятственно переключающихся на другой IP-адрес, или он может использовать что-то вроде пакетов keep-alive для поддержания состояния соединения, а когда соединение 3G обрывается, он отключает ваш сеанс.

Возможно, это не то, что вы контролируете.С точки зрения Android - устройство будет предпочитать WiFi в зависимости от предпочтений пользователя, и вы, вероятно, также не будете иметь никакого прямого контроля над этим.

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

Все мобильные устройства и, в меньшей степени, настольные компьютеры / ноутбуки в какой-то момент изменят свой общедоступный IP-адресадрес, так что для меня это звучит как ошибка или недосмотр в дизайне сервера / протокола.


РЕДАКТИРОВАТЬ:

В ответ на ваш комментарий и в интересах UX выследует очень внимательно относиться к поиску способа заставить ваше приложение (возможно, даже все устройство) оставаться в сети 3G, когда пользователь запросил его использование Wi-Fi.

Большинство людей ограничивают планы передачи данных с помощью своего устройства и не хотятне очень приятно, если они думают, что они используют WiFi (который, скорее всего, бесплатный, или, по крайней мере, без дополнительныхost) когда вы фактически заставили их устройство продолжать использовать потенциально очень дорогие данные 3G.

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


РЕДАКТИРОВАТЬ 2:

Таким образом, для вас может быть способ сделать это, ноон опирается на неподдерживаемые частные API-интерфейсы Android, которые могут измениться в любой момент - применяется обычный отказ от ответственности.

Взгляните здесь , где они получают доступ к объекту ConnectivityManager, чтобы позволить вам включить мобильные данные.

Этот метод требует от вас построения на основе исходного дерева Android и использования общего идентификатора пользователя с «системой», поэтому он может или не может быть подходящим, но эти API-интерфейсы являются частными (поскольку приложения не должны иметь возможностьсделать это без действий пользователя), но это может помочь вам.

0 голосов
/ 08 марта 2012

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

...