You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI:iOS及Android平台获取本地设备IP地址(适配新版API)

.NET MAUI 获取iOS/Android本地IP地址(适配新版API)

针对Android 31+和iOS 15+的API废弃情况,以下是替代过时方案的本地IP获取实现:

Android 端(适配Android 31+)

原WifiManager.ConnectionInfo已过时,改用ConnectivityManager结合网络接口枚举实现:

  1. 权限配置:在Platforms/Android/AndroidManifest.xml中添加:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    
  2. 平台代码实现:
    using Android.Content;
    using Android.Net;
    using Java.Net;
    
    public class AndroidIpHelper : IIpHelper
    {
        public string GetLocalIp()
        {
            var connManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService);
            var activeNetwork = connManager.ActiveNetwork;
            var capabilities = connManager.GetNetworkCapabilities(activeNetwork);
    
            if (capabilities == null) return string.Empty;
    
            foreach (var iface in NetworkInterface.NetworkInterfaces)
            {
                foreach (var addr in iface.InetAddresses)
                {
                    if (!addr.IsLoopbackAddress && addr is Inet4Address)
                    {
                        return addr.HostAddress;
                    }
                }
            }
            return string.Empty;
        }
    }
    

iOS 端(适配iOS 15+)

原NSNetService.Addresses已过时,改用Apple Network框架的NWInterface获取:

  1. 权限说明:无需额外配置,默认允许访问本地网络信息。
  2. 平台代码实现:
    using Network;
    using System.Net;
    
    public class IosIpHelper : IIpHelper
    {
        public string GetLocalIp()
        {
            foreach (var nwInterface in NWInterface.Interfaces)
            {
                foreach (var endpoint in nwInterface.IPAddresses)
                {
                    if (IPAddress.TryParse(endpoint.ToString(), out var ip) && !ip.IsLoopback && ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        return ip.ToString();
                    }
                }
            }
            return string.Empty;
        }
    }
    

跨平台调用

  1. 定义共享接口:
    public interface IIpHelper
    {
        string GetLocalIp();
    }
    
  2. 注册依赖服务(在MauiProgram.cs中):
    builder.Services.AddSingleton<IIpHelper>(sp =>
    {
        return DeviceInfo.Platform switch
        {
            DevicePlatform.Android => new AndroidIpHelper(),
            DevicePlatform.iOS => new IosIpHelper(),
            _ => throw new NotSupportedException("当前平台不支持")
        };
    });
    
  3. 业务代码中使用:
    var ipHelper = ServiceProvider.GetRequiredService<IIpHelper>();
    string localIp = ipHelper.GetLocalIp();
    

内容的提问来源于stack exchange,提问作者Onur Buyukcaglar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:44