Подтвердить что ты не робот

Android: данные, передаваемые по радио и Wi-Fi

Можно ли заставить приложение Android использовать только мобильное радиосоединение (3g/4g/etc), запрещая использование Wi-Fi?

Я думаю, что хочу использовать соединение HIPRI: (например: WIFI включен, используйте HIPRI 3G): http://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b

4b9b3361

Ответ 1

Я не верю, что вы можете "принудительно" подключить путь без явного отключения Wi-Fi радио временно (не рекомендуется). Тем не менее, вы можете попробовать настроить сетевые предпочтения в течение периода, который вы хотите, чтобы это произошло:

ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//Prefer mobile over wifi
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

//Do your work

//Remove your preference
cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);

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

Ответ 2

В Android 2.2 вы можете использовать высокоприоритетные мобильные данные одновременно с WiFi. Значение параметра "feature" является "enableHIPRI" и скрыто в Phone API.

Метод: ConnectivityManager.startUsingNetworkFeature(int networkType, String) http://developer.android.com/reference/android/net/ConnectivityManager.html

Источник: http://code.google.com/p/android/issues/detail?id=5885

Вы можете проверить этот ответ: fooobar.com/questions/178346/...

Это НЕ хорошая политика... используйте ее, если ДЕЙСТВИТЕЛЬНО необходимо!

Ответ 3

ConnectivityManager.setNetworkPreference() близок к устареванию. Но что более важно, если вы доработаете getNetworkPreference() перед изменением, оно вернет ConnectivityManager.TYPE_MOBILE. Установка его там не имеет никакого значения. Что касается самого HIPRI, он работает в довольно странном режиме. Во-первых, он позволяет подключаться ко всем хостам, а не только к тем, которые явно запрашиваются. Во-вторых, когда вы выключаете его при вызове stopUsingFeature...(), он не будет отключен и будет оставаться активным. В-третьих, все приложения устройств начинают использовать его, даже если Wi-Fi доступен, что противоречит тому, что сказано в документации.

Ответ 4

(я ответил на тот же вопрос здесь)

Вы не можете принудительно принудительно использовать канал связи для каждого приложения (вы можете запросить использовать предпочтительный режим через ConnectivityManager.setNetworkPreference(...), но это не "форсирование" ).

Хотя это, вероятно, ужасный UX, вы можете сообщить пользователю, что ваше приложение запрещает использование Wi-Fi, а затем отключает их Wi-Fi, если они хотят продолжить. Для этого вам необходимы разрешения ACCESS_WIFI_STATE и CHANGE_WIFI_STATE. Код будет выглядеть примерно так:

manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);

if(manager.isWifiEnabled()) {
    manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

Ответ 5

Попробуйте взглянуть на это, у него много информации и может найти решение, которое вы ищете: Как использовать 3G-соединение в приложении Android вместо Wi-fi?

У этого есть пример рабочего сервиса, который устанавливает мобильное соединение HIPRI и поддерживает его. AFAIK это единственный более или менее простой способ работать с Wi-Fi и 3g в android. Единственным недостатком является то, что это соединение позволит только передавать данные серверам, на которые явно запрашивалась маршрутизация. Это в основном означает, что вы не можете маршрутизировать на многие серверы, потому что поиск по имени для получения IP-адреса требует времени, а его выполнение для 10 серверов займет 30-60 секунд, что заставляет его начинать медленно. Поэтому вы должны точно знать, какие серверы должны быть доступны через мобильное соединение.