即使未注册,网络回调也被多次调用

时间:2018-10-19 14:53:17

标签: android android-connectivitymanager

在我的Android应用中,即使启用了蜂窝数据,我也需要通过没有互联网连接的Wi-Fi连接来调用API。我设法用下面的代码来处理这个问题:

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所述,如果满足请求的网络发生更改,则可能会多次调用networkcallback。 (https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onAvailable(android.net.Network)) 但是正如您在我的代码中看到的那样,即使网络发生了变化,我也会立即取消注册networkcallback,以防止再次调用此回调。我在做什么错了?

0 个答案:

没有答案