NetworkInterface.getNetworkInterfaces() returns null (androi



我运行下面的connectAndroidQ代码来连接打开ap,并断开连接AndroidQ码来断开连接,但在连接和断开连接后,NetworkInterface.getNetworkInterface((的返回值为null。

在执行下面的代码之前,NetworkInterface.getNetworkInterface((的返回值是正常的,但仅运行代码就会返回null值。

测试手机:pixel2安卓版本:10

@RequiresApi(api = Build.VERSION_CODES.Q)
private boolean connectAndroidQ(@Nullable ConnectivityManager connectivityManager, ScanResult scanResult) {
if (connectivityManager == null) {
return false;
}
WifiNetworkSpecifier.Builder wifiNetworkSpecifierBuilder = new WifiNetworkSpecifier.Builder()
.setSsid(scanResult.SSID);
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(wifiNetworkSpecifierBuilder.build())
.build();
if (networkCallback != null) {
connectivityManager.unregisterNetworkCallback(networkCallback);
}
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
connectivityManager.bindProcessToNetwork(network);
}
@Override
public void onUnavailable() {
super.onUnavailable();
}
};
connectivityManager.requestNetwork(networkRequest, networkCallback);
return true;
}
@RequiresApi(api = Build.VERSION_CODES.Q)
private boolean disconnectAndroidQ(@NonNull final ConnectivityManager connectivityManager) {
if (networkCallback != null) {
connectivityManager.unregisterNetworkCallback(networkCallback);
networkCallback = null;
}
return true;
}

请帮忙。

提前谢谢。

我通过调用bindProcessToNetwork(null(解决了这个问题。

请参阅下面的链接,注意,如果网络断开连接,以这种方式创建的所有套接字都将停止工作,并且所有主机名解析都将失败。这是经过设计的,这样应用程序就不会意外地使用它认为仍然绑定到特定网络的套接字。若要清除绑定,请为网络传递null。

https://developer.android.com/reference/android/net/ConnectivityManager#bindProcessToNetwork(android.net.Network(

最新更新