在我的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,以防止再次调用此回调。我在做什么错了?