Xamarin 从 WIFI 连接形成 GET DNS 服务器

Xamarin forms GET DNS server from WIFI connection

我正在使用 xamarin 表单,但遇到一个问题,

我正在尝试从 WIFI 获取 DNS 服务器地址,我正在使用 below 代码:

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface networkInterface in networkInterfaces)
            {
                if (networkInterface.OperationalStatus == OperationalStatus.Up)
                {
                    IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
                    IPAddressCollection dnsAddresses = ipProperties.DnsAddresses;

                    foreach (IPAddress dnsAdress in dnsAddresses)
                    {
                        Debug.WriteLine(dnsAdress);
                    }
                }
            }

问题是当我在 Microsoft 模拟器“UWP”上使用此代码时一切正常,请参见下面的图片 using UWP device

但是当我使用我的 android 手机时没有任何效果见下图 using android device

注意:所有设备都连接到同一个 wifi

我做了一个简单的测试你的代码并得到了相同的空值。然后看了IPInterfaceProperties.DnsAddresses属性文档,好像不支持xamarin.android.

您可以查看它:https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.ipinterfaceproperties.dnsaddresses?view=net-6.0

另外,我也搜索了这个,但没有找到任何解决方案。所以我尝试使用android native 方法通过以下代码获取dns地址。所以你可以尝试使用依赖服务获取android.

的dns地址
            ConnectivityManager cm = (ConnectivityManager)GetSystemService(ConnectivityService);
            //NetworkInfo has been deprecated, but I can not find the new api to to this
            NetworkInfo activeNetworkInfo = cm.ActiveNetworkInfo;
            foreach (Network network in cm.GetAllNetworks())
            {
                NetworkInfo networkInfo = cm.GetNetworkInfo(network);
                if (networkInfo.GetType() == activeNetworkInfo.GetType())
                {
                    LinkProperties lp = cm.GetLinkProperties(network);
                    foreach (InetAddress addr in lp.DnsServers)
                    {
                        var a = addr.GetAddress();
                    }
                }
            }