Android Lollipop по умолчанию для мобильных данных, когда Wi-Fi не имеет доступа к Интернету?
Android Lollipop
кажется, по умолчанию для мобильных данных, когда Wi-Fi
у вас нет доступа к интернету Кто-нибудь знает, официально ли это где-то задокументировано?
У нас есть приложение, которое должно подключаться к машинам через Wi-Fi
что нет интернета. Наши клиенты сейчас сообщают, что Wi-Fi
соединение больше не работает, потому что телефон автоматически переключается на LTE
,
Я понимаю, что телефон все еще держит Wi-Fi
соединение, но использует LTE
в дополнение к предоставлению доступа к Интернету ( lollipop-функция-прожектор-android-теперь-по-умолчанию-для-мобильных-данных-когда-wi-fi-нет-нет-доступа к интернету-сигнал-значок-добавляет-а-для -нет связи).
Мое понимание этой функции неверно? И если да, есть ли способ принудительно использовать Wi-Fi без интернета? Я не мог найти ничего об этом, в частности, в документации для разработчиков.
Любая помощь очень ценится.
3 ответа
В продолжение ответа @ianhanniballake я обнаружил, что привязка сети с помощью ConnectivityManager.setProcessDefaultNetwork() предотвращает роуминг и обеспечивает полный доступ по TCP. Таким образом, с помощью обратного вызова onAvailable() вы можете привязать процесс приложения к этой сети, а не открывать соединение с определенным URL-адресом.
ConnectivityManager connection_manager =
(ConnectivityManager) activity.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connection_manager.registerNetworkCallback(request.build(), new NetworkCallback() {
@Override
public void onAvailable(Network network) {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
На уровне API 23: Пожалуйста, используйте следующий метод OnAvailable:
@Override
public void onAvailable(Network network) {
connection_manager.bindProcessToNetwork(network);
}
По умолчанию Android 5.0 будет отправлять сетевые запросы только через сети, которые, как он обнаруживает, имеют активное интернет-соединение, поэтому, хотя он может быть "подключен" к Wi-Fi, он не собирается отправлять какие-либо данные по сети.
Однако в руководстве по API Android 5.0 рассказывается о новой поддержке нескольких сетей:
Android 5.0 предоставляет новые многосетевые API-интерфейсы, которые позволяют вашему приложению динамически сканировать доступные сети с определенными возможностями и устанавливать соединение с ними. Эта функция полезна, когда вашему приложению требуется специализированная сеть, такая как SUPL, MMS или биллинговая сеть, или если вы хотите отправлять данные с использованием определенного типа транспортного протокола.
Это позволяет вам создать NetworkRequest для типа TRANSPORT_WIFI и направить трафик к нему через Network.openConnection(), когда вы получаете обратный вызов onAvailable(), если у вас должны быть определенные соединения через Wi-Fi, даже если сеть Wi-Fi не имеет доступа в Интернет.
Android 5.0 предоставляет новые многосетевые API-интерфейсы, которые позволяют вашему приложению динамически сканировать доступные сети с определенными возможностями и устанавливать соединение с ними. Больше информации здесь
Поэтому решение для вас - ConnectivityManager.requestNetwor ().
Это не решение для тех, кто пытается решить проблему подключения из собственного приложения. Но для тех, кто приезжает сюда в поисках решения для доступа к Wi-Fi без интернета с помощью стандартного приложения, такого как Google Chrome:
Вам просто нужно отключить "Мобильные данные" в настройках телефона, и Chrome или любое другое приложение легко получит доступ к вашему Wi-Fi.