我正在平板电脑设备上开发Xamarin.Android应用程序,我正在努力构建一个能够连接到任何可用wifi网络的活动,并在与设备通信时为每个网络设置单独的静态IP。 / p>
我到目前为止最接近解决方案的是Android.Net.Wifi.WifiManager.ConnectionInfo.IpAddress
,但这只是一个吸气剂,而且是当前连接的 wifi网络:
public virtual int IpAddress { get; }
这一切都可能吗?谢谢!
答案 0 :(得分:0)
要获取可用的wifi网络列表,您可以使用ScanResults Property的Android.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 assignment
和Proxy settings
的方法,所以我个人怀疑设置静态IP地址是否可以完成,除非我们知道Xamarin.Android的WifiConfiguration
看起来如何喜欢。