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.

Другие вопросы по тегам