Как принудительно установить HTTP-соединение через Wi-Fi вместо сотовой связи в Android?

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

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


person amsiddh    schedule 02.03.2011    source источник
comment
Разве устройство не делает это автоматически? И другой вопрос: должны ли вы действительно решать за пользователя, какое интернет-соединение он хочет использовать?   -  person markus    schedule 02.03.2011
comment
Спасибо, Маркус, за твой ответ, я понял, что ты пытаешься сказать, но ты не понял, что мне нужно. (Как и когда мы делаем запросы на HTTP-соединение, платформа Android будет решать, из какой сети он должен проходить, в зависимости от ее доступности.) Но все мое приложение требует, чтобы HTTP-запросы на соединение проходили через Wi-Fi, а не через сотовую связь. Приложение работает с точками доступа Wi-Fi, скажем, когда пользователь находится в сети Wi-Fi abc, затем запускает приложение для аутентификации через http-запрос через сеть Wi-Fi abc. Затем после susscess разрешите пользователю использовать сеть abc wifi для просмотра.   -  person amsiddh    schedule 02.03.2011
comment
Почему бы просто не обработать все это на стороне сервера, как это делают большинство интернет-провайдеров Wi-Fi? Тогда вы получаете то, что работает на любом устройстве, не требует установки, отслеживания версий Android и т. д.   -  person Chris Stratton    schedule 02.03.2011
comment
Привет, Крис, я согласен с тобой. Это все требования клиента, и у них уже есть реализация на стороне сервера, как у других провайдеров точек доступа Wi-Fi, и теперь они также хотят иметь собственное приложение.   -  person amsiddh    schedule 04.03.2011


Ответы (3)


Нет никакого способа заставить его использовать тот или иной. Любая доступная сеть используется, будь то 3G или Wi-Fi (если Wi-Fi подключен, 3G отключен). Если вы не хотите что-то делать в зависимости от того, какая сеть используется в данный момент, вы можете проверить, не подключен ли Wi-Fi, и не предпринимать никаких действий, если это так, и запросить пользователя. Карты Google делают что-то подобное, если Локатор включен.

Класс WifiManager содержит множество методов, которые могут быть полезны для ты.

person Robby Pond    schedule 02.03.2011
comment
Спасибо, Робби, за ваш ответ, хорошо, это правда. наоборот. Как мне убедиться, что запрос идет только от Wi-Fi. - person amsiddh; 02.03.2011
comment
@amsiddh Прочитайте мой ответ еще раз. Если Wi-Fi подключен, единственное доступное соединение для передачи данных — Wi-Fi, 3g будет неактивным. - person Robby Pond; 02.03.2011
comment
эй, Робби, спасибо еще раз, реализую это и вернусь с результатами. - person amsiddh; 02.03.2011

вы можете использовать setNetworkPrefrence(ConnectivityManager.TYPE_WIFI) класса ConnectivityManager в Android

person Rohit Mandiwal    schedule 02.03.2011
comment
Обратите внимание, что для этого приложению требуется разрешение CHANGE_NETWORK_STATE. Я немного повозился с этим, и оказалось, что вызов (после того, как он вступит в силу), по-видимому, влияет на все приложения, использующие подключение, поэтому его, безусловно, следует использовать с осторожностью. Я также обнаружил, что этот звонок ненадежен (по крайней мере, на Nexus One, на котором я его пробовал). - person scorpiodawg; 09.06.2011
comment
setNetworkPrefrence(ConnectivityManager.TYPE_WIFI) устарел на уровне API 21. Подробнее: developer.android.com/reference/android/net/ - person krawiec; 04.07.2016

Вы можете использовать OkHttp и собственный SocketFactory. Подробнее см. https://github.com/square/okhttp/issues/2404. Детали.

person mbonnin    schedule 24.07.2019