В моем андроид-приложении мне нужно вызывать API через соединение Wi-Fi, которое не имеет интернет-соединения, даже если сотовые данные включены.Мне удается справиться с этим с помощью нижнего кода:
NetworkRequest.Builder builder;
builder = new NetworkRequest.Builder();
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
final ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
connectivityManager.unregisterNetworkCallback(this);
SendAPIRequest();
}
});
Пока все хорошо.Однако на некоторых устройствах Android метод onAvailable (и, следовательно, метод SendAPIRequest) иногда вызывается несколько раз, а не всегда.Как указано на developer.android.com, сетевой вызов может вызываться более одного раза, если сеть, удовлетворяющая запросу, изменяется.(https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onAvailable(android.net.Network)) Но, как вы можете видеть из моего кода, я незамедлительно отменяю сетевой обратный вызов, чтобы предотвратить повторный вызов этого обратного вызова, даже если сеть изменится. Что я делаю не так?