Android Lollipop по умолчанию использует данные Mobile Data, когда Wi-Fi не имеет доступа в Интернет?
Android Lollipop
по умолчанию используется для мобильных данных, когда к Wi-Fi
, к которому вы подключены, не имеет доступа в Интернет. Кто-нибудь знает, где это официально зарегистрировано?
У нас есть приложение, которое должно подключаться к машинам через Wi-Fi
, у которых нет Интернета. Теперь наши клиенты сообщают, что соединение Wi-Fi
больше не работает, поскольку телефон автоматически переключается на LTE
.
Мое понимание было бы в том, что телефон по-прежнему поддерживает соединение Wi-Fi
, но использует LTE
в дополнение к обеспечению доступа к Интернету (lollipop-feature-spotlight-android-now-defaults-to-mobile-data-when-wi-fi-has-no-internet-access-signal-icon-adds-a-for-no-connection).
Я понимаю, что это неправильно? И если да, то есть ли способ заставить использовать Wi-Fi без Интернета? Я не мог найти ничего об этом, в частности, в документации разработчика.
Любая помощь действительно оценена.
Ответы
Ответ 1
Чтобы расширить ответ на @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);
}
}
Ответ 2
По умолчанию Android 5.0 будет отправлять только сетевые запросы по сетям, которые он обнаруживает, имеет активное интернет-соединение, поэтому, когда он может быть "подключен" к Wi-Fi, он не собирается отправлять какие-либо данные по сети.
Однако API 5.0 для Android 5.0 говорит о новой поддержке нескольких сетей:
Android 5.0 предоставляет новые мультисервисные API, позволяющие вашему приложению динамически сканировать доступные сети с определенными возможностями и устанавливать соединение с ними. Эта функциональность полезна, когда вашему приложению требуется специализированная сеть, такая как SUPL, MMS или сеть биллинга оператора, или если вы хотите отправлять данные с использованием определенного типа транспортного протокола.
Это позволяет вам создать NetworkRequest для TRANSPORT_WIFI и прямой трафик на него через Network.openConnection(), когда вы получаете onAvailable() обратный вызов, если вы должны иметь определенные подключения к Wi-Fi, даже если Wi-Fi-сеть не имеет доступа в Интернет.
Ответ 3
Android 5.0 предоставляет новые мультисервисные API, позволяющие вашему приложению динамически сканировать доступные сети с определенными возможностями и устанавливать соединение с ними.
Подробнее здесь
Таким образом, решение для вас - ConnectivityManager.requestNetwor().