Networkcallback вызывается несколько раз даже после отмены регистрации - PullRequest
0 голосов
/ 19 октября 2018

В моем андроид-приложении мне нужно вызывать 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)) Но, как вы можете видеть из моего кода, я незамедлительно отменяю сетевой обратный вызов, чтобы предотвратить повторный вызов этого обратного вызова, даже если сеть изменится. Что я делаю не так?

...