使用Xamarin是否可以通过编程方式连接WiFi网络?

3

使用Xamarin.iOS和Xamarin.Android,可以检查Wi-Fi是否已启用? 如果禁用了,是否可以启用它? 一旦启用,如何搜索并连接到网络?

1个回答

10

启用/禁用Wifi:

WifiManager wifiManager = (WifiManager)GetSystemService(WifiService);
if (!wifiManager.IsWifiEnabled)
    wifiManager.SetWifiEnabled(true);
else 
    wifiManager.SetWifiEnabled(false);

更改Wifi状态的权限:

android.permission.CHANGE_WIFI_STATE

添加网络:

var networkSSID = "Stack";
var networkPass = "Overflow";
var config = new WifiConfiguration();
config.Ssid = '"' + networkSSID + '"';

// For WPA/WPA2, WEP is different (still using WEP? shame on you ;-)
config.PreSharedKey = '"' + networkPass + '"';
wifiManager.AddNetwork(config);

连接到网络:

IList<WifiConfiguration> myWifi = wifiManager.ConfiguredNetworks;
wifiManager.Disconnect();
wifiManager.EnableNetwork(myWifi.FindFirst(x => x.Ssid.Contains(networkSSID)), true);
wifiManager.Reconnect();

谢谢您的回复。我还没有实施,但这个解决方案似乎非常特定于Xamarin.Android。对于Xamarin.iOS会怎样呢? - Luís Rigoni
1
@LuísRigoni 您说得对,我的答案是针对Android的,可能在iOS标签上看错了... iOS非常限制允许访问网络。在iOS上,您的应用程序被沙箱化,无法访问Wifi管理器的密钥链,因此不能以编程方式添加SSID,也不能以编程方式连接到SSID,您曾经能够读取当前的SSID,但9.x删除了该访问权限,在iOS 5.1中删除了打开默认设置... 对于通用连接性,我强烈推荐:https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Connectivity/Connectivity - SushiHangover
我认为这也需要:android.permission.ACCESS_WIFI_STATE - Ignatius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接