NetworkInterface.getNetworkInterfaces() returns 空值 (android 29)

NetworkInterface.getNetworkInterfaces() returns null (android 29)

我运行下面connectAndroidQ代码连接打开ap,disconnectAndroidQ代码断开,但是连接断开后,NetworkInterface.getNetworkInterfaces()的return值为null .

在执行下面的代码之前,NetworkInterface.getNetworkInterfaces()的return值是正常的,只是运行将代码return设为空值。

测试phone:pixel2 android 版本: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) 解决了这个问题。

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

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