【问题标题】:Can you set a static IP programmatically for a list of Wifi networks in Xamarin Android?您能否以编程方式为 Xamarin Android 中的 Wifi 网络列表设置静态 IP?
【发布时间】:2026-02-01 00:25:03
【问题描述】:

我正在平板设备上开发 Xamarin.Android 应用程序,并且正在构建一个能够连接到任何可用 wifi 网络并在与设备通信时为每个网络设置单独的静态 IP 的活动。

到目前为止,我最接近的解决方案是Android.Net.Wifi.WifiManager.ConnectionInfo.IpAddress,但这只是一个吸气剂,而且是 当前连接的 wifi 网络:

public virtual int IpAddress { get; }

这有可能吗?谢谢!

【问题讨论】:

    标签: android networking xamarin.android wifimanager static-ip-address


    【解决方案1】:

    要获取可用 wifi 网络的列表,您可以使用 Android.Net.Wifi.WifiManager ClassScanResults Property。例如:

    var wifiManager = (WifiManager)GetSystemService(Context.WifiService);
    //open wifi
    if (!wifiManager.IsWifiEnabled)
        wifiManager.SetWifiEnabled(true);
    var wifiList = wifiManager.ScanResults;
    

    为此,您需要在应用清单中启用所有与 wifi 相关的功能,例如:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

    要设置静态 IP,没有开放的 API 可以完成这项工作。而像Android.Provider.Settings.System.WifiStaticGateway 这样的API 已经过时了,通常我们在传统的Java android 应用程序中使用反射来设置WifiConfiguration,比如在这种情况下:How to configue a static IP address, netmask, gateway programmatically on Android 3.x or 4.x

    虽然在xamarin这里,默认WifiConfiguration是这样的:

    {* ID:-1 SSID:空 BSSID:空 PRIO:0 KeyMgmt:协议: 认证算法: 成对密码: 组密码: PSK: IP分配:未分配 代理设置:未分配 {LinkAddresses:[] 路由:[] DnsAddresses:[] 域:nullMTU:0} }

    但经过一些研究,我发现默认 Android WifiConfiguration.java 中的 ipAssignment 等字段在 xamarin.android 应用程序中不可用。我们不知道 Xamarin.Android 如何封装其WifiConfiguration

    我找不到更改其IP assignmentProxy settings 的方法,因此我个人怀疑设置静态IP 地址是否可以完成,除非我们知道Xamarin.Android 的WifiConfiguration 的样子。

    【讨论】: