使用 .NET MAUI 从 Android 和 IOS 设备获取 IP 地址

问题描述 投票:0回答:1

我正在尝试使用 .NET MAUI 从 Android 设备获取 IP 地址。 (当前android框架net6.0-android)

使用下面的代码,我可以在第一次启动应用程序时获取IP。除非我重新启动手机,否则启动应用程序后它不起作用。(在三星 S10+ Android 12 上测试)

    private void GetIPAddressClicked(object sender, EventArgs e)
{

    string interfaceDescription = string.Empty;
    var result = new List<IPAddress>();
    try
    {
        var upAndNotLoopbackNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces().Where(n => n.NetworkInterfaceType != NetworkInterfaceType.Loopback
                                                                                                      && n.OperationalStatus == OperationalStatus.Up);

        foreach (var networkInterface in upAndNotLoopbackNetworkInterfaces)
        {
            var iPInterfaceProperties = networkInterface.GetIPProperties();

            var unicastIpAddressInformation = iPInterfaceProperties.UnicastAddresses.FirstOrDefault(u => u.Address.AddressFamily == AddressFamily.InterNetwork);
            if (unicastIpAddressInformation == null) continue;

            result.Add(unicastIpAddressInformation.Address);

            interfaceDescription += networkInterface.Description + "---";
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"Unable to find IP: {ex.Message}");
    }
    finally
    {
        string allIpInfo = string.Empty;
        foreach (var item in result)
        {
            allIpInfo += item.ToString() + "---";
        }
        IPAddress.Text = allIpInfo;

        InterfaceName.Text = interfaceDescription;
    }

当它起作用时,

界面描述=“------”

allIpInfo = "192.168.50.112---127.0.0.1---"

当它不起作用时,

接口描述 ---> rmnet_data0

allIpInfo ---> 192.0.0.2

我不确定这里出了什么问题。我怎样才能解决这个问题?或者有更好的方法获取IP地址吗? 谢谢。

c# android .net ip-address .net-maui
1个回答
0
投票

在替代方案中,我可以推荐这种方法。它仅返回 IP 地址,而不是像上面的代码那样返回整个列表。

#if ANDROID
            WifiManager wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Service.WifiService);
            int ipaddress = wifiManager.ConnectionInfo.IpAddress;
            IPAddress ipAddr = new IPAddress(ipaddress);  
            IpAddressTextLabel.Text = ipAddr.ToString();
            return;
#endif

对于 Windows,您可以使用

Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork).ToString();
© www.soinside.com 2019 - 2024. All rights reserved.