您能否以编程方式为Xamarin Android中的Wifi网络列表设置静态IP?

时间:2016-12-11 20:53:57

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

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

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

public virtual int IpAddress { get; }

这一切都可能吗?谢谢!

1 个答案:

答案 0 :(得分:0)

要获取可用的wifi网络列表,您可以使用ScanResults PropertyAndroid.Net.Wifi.WifiManager Class。例如:

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这样的Apis已经过时,通常我们在传统的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:null BSSID:null PRIO:0    KeyMgmt:协议:    AuthAlgorithms:    PairwiseCiphers:    GroupCiphers:    PSK:   IP分配:UNASSIGNED   代理设置:UNASSIGNED   {LinkAddresses:[] Routes:[] DnsAddresses:[] Domains:nullMTU:0}   }

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

我找不到改变其IP assignmentProxy settings的方法,所以我个人怀疑设置静态IP地址是否可以完成,除非我们知道Xamarin.Android的WifiConfiguration看起来如何喜欢。