Можно ли одновременно использовать интерфейсы Wi-Fi и сотовой сети на Android? - PullRequest
19 голосов
/ 04 января 2012

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

Я пробовал технику, описанную в обсуждении Группа разработчиков Google Android под названием «Can Android 2.X подключается к сетям передачи данных 3G и Wifi одновременно? », Но это не работает хорошо. Я обнаружил, что когда я включаю сотовая сеть по телефону ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE), все розетки, которые у меня открыты, в сети Wi-Fi закрыты. У меня нет попробовал, но я подозреваю, что то же самое случится с сокетами на сотовая сеть, когда я снова переключаюсь на Wi-Fi.

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

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

1. Кто-нибудь знает, как это сделать это?
2. Кто-нибудь знает, возможно ли это?

Спасибо за вашу помощь.

Ответы [ 8 ]

1 голос
/ 28 апреля 2013

Эта тема Android: принудительная отправка данных по радио по Wi-Fi упоминает два возможных подхода к проблеме.

  1. Установите настройки сети, когда вы хотите, чтобы ваше приложение использовало определенное соединение:

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
    
  2. Включить высокоскоростное мобильное соединение для передачи данных:

    connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
    

Для второго подхода специально указано, что он работает с Android 2.2, не знаю, работает ли он и в реальных версиях. Однако, насколько я выяснил, enableHIPRI более или менее скрытая настройка сети, поэтому я бы предпочел первый способ, если это возможно.

0 голосов
/ 07 октября 2013

Возможно, вы захотите заглянуть в специальные Wi-Fi сети. Он подключается к устройствам через Wi-Fi, даже если дроид уже использует Wi-Fi для интернета (хотя не использует стек ip).

Не путайте соединения Wi-Fi (IEEE 802.11x) с интернет-соединениями (IP). IP может работать по Wi-Fi, мобильному телефону, Ethernet, DSL, Dailup или голубям, но только одна сеть за раз.

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

https://code.google.com/p/android-wifi-tether/

Обратите внимание, что многие операторы запрещают многоадресную передачу (совместное использование) своих IP-соединений. Ницца.

0 голосов
/ 07 октября 2013

Если я не ошибаюсь, при наличии Wi-Fi и 3G / 4G приоритет будет иметь Wi-Fi.

Только когда Wi-Fi недоступен, он переключится на 3G /4G.Конечно, это при условии, что оба устройства включены одновременно.

Вместо использования частного Wi-Fi, что ограничивает ваш выбор, вы можете рассмотреть возможность подключения к VPN с выходом в Интернет, чтобы устройство подключалось к VPN из 3G /4G, а затем получить доступ к данным, если безопасность связана с использованием частного wifi.

И VPN-клиенты встроены в Android, а также доступны сторонние клиенты.

Надеюсь, это поможет!

0 голосов
/ 14 сентября 2013

В настоящее время невозможно одновременно использовать обе сети в Android-приложении, но вы можете сделать это на ПК.
Подключите один из своего маршрутизатора WIFI и один из локальной сети или через USB-накопитель USB.
Поэтому создайте приложение ииспользовать на ПК.Если вы не знаете, как запустить Android на ПК, воспользуйтесь Google.

0 голосов
/ 29 августа 2013

Сети передачи данных 3G и Wifi не могут подключаться одновременно, но 3G и Wifi могут быть подключены одновременно, если поддержка оператора и платформа Android также изменятся для оператора. Теперь некоторые операторы уже имеют эту функцию, но некоторые не могут.

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

Я думаю, что одновременно возможна только одна услуга.Либо вы можете использовать Wi-Fi, либо вы можете использовать сотовые 3G данные.Оба не могут работать одновременно одновременно.

0 голосов
/ 04 марта 2013

Без корневого доступа приложение не может сильно влиять.

С помощью Android API вы можете в большинстве случаев просто включить WiFi в надежде, что устройство переключится на него и отключить WiFi, чтобы устройство переключилось на 3G (если оно есть, APN правильно и т. Д.).

Все остальное не гарантируется. Например. установка предпочтительного типа подключения не гарантирует, что устройство переключится на этот тип.

Обычное поведение состоит в том, что, как только Wi-Fi станет доступным, устройство на короткое время (3-5 секунд) включит 3G и WiFi, а затем отключит 3G. Как только пользователь или ваше приложение отключат Wi-Fi, а устройство попытается подключиться к Интернету, оно через некоторое время включит 3G.

Начиная с Android 2.3, вы больше не можете отключать / включать 3G. Один из них использовался для порчи / восстановления настроек APN, чтобы включить / отключить 3G, но начиная с версии 4.0, вы не можете изменять настройки APN программно.

0 голосов
/ 04 января 2012

Если вы не можете сделать это с помощью вызовов API, и если вы хотите испачкать руки на более низком уровне, некоторые знания Linux могут помочь. По сути, вам нужно вызвать оба интерфейса и установить маршрут по умолчанию на интерфейсе 3g. Вам придется использовать системные команды с привилегиями root для выполнения этой задачи. Причиной закрытия сокетов, вероятно, является интерфейс, который отключается и снова из-за вызова API.

...