我正在尝试使用 .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地址吗? 谢谢。
在替代方案中,我可以推荐这种方法。它仅返回 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();