Я создаю приложение для Android, которое должно связываться через сеть WiFi, у которой не будет доступа к Интернету. Проблема в том, что даже когда Wi-Fi подключен, android решает использовать сотовые/мобильные данные, если в сети Wi-Fi нет интернет-соединения.
Я прочитал много сообщений по проблеме, многие из которых связаны с укоренением устройства, но это невозможно с производственным приложением (укореняющие устройства не). другое решение (например, мой код ниже) предлагает использовать bindProcessToNetwork()
, который отлично работает на моем Sony Z2, но не на других устройствах, на которых я тестировал (все работает 6.0.1)
private void bindToNetwork() {
final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new NetworkRequest.Builder();
//set the transport type do WIFI
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.bindProcessToNetwork(null);
if (barCodeData.getSsid().contains("screenspace")) {
connectivityManager.bindProcessToNetwork(network);
}
} else {
//This method was deprecated in API level 23
ConnectivityManager.setProcessDefaultNetwork(null);
if (barCodeData.getSsid().contains("screenspace")) {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
connectivityManager.unregisterNetworkCallback(this);
}
});
}
}