MAUI Android switch Wi-Fi
要点:安卓切换WiFi需要注意安卓版本,29版本以后需要单独处理。

1 public async void SwitchWifi(string sSSID, string password) 2 { 3 try 4 { 5 WifiManager wifiManager = (WifiManager)(AndroidApp.Application.Context.GetSystemService(Context.WifiService)); 6 WifiConfiguration tempConfig = isExsits(sSSID); 7 if (AndroidOS.Build.VERSION.SdkInt >= AndroidOS.BuildVersionCodes.Q) 8 { 9 10 var wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder() 11 .SetSsid(sSSID) 12 .SetWpa2Passphrase(password) 13 .Build(); 14 var networkRequest = new NetworkRequest.Builder() 15 .AddTransportType(TransportType.Wifi) 16 .RemoveCapability(NetCapability.Internet) 17 .AddCapability(NetCapability.NotRestricted) 18 .AddCapability(NetCapability.Trusted) 19 .SetNetworkSpecifier(wifiNetworkSpecifier) 20 .Build(); 21 22 ConnectivityManager connMgr = (ConnectivityManager)(AndroidApp.Application.Context.GetSystemService(Context.ConnectivityService)); 23 GlobeNetworkCallbakc networkCallback = new GlobeNetworkCallbakc(connMgr); 24 connMgr.RequestNetwork(networkRequest, networkCallback); 25 26 } 27 else 28 { 29 var currentSSID = wifiManager.ConnectionInfo.SSID; 30 if (tempConfig != null) 31 { 32 bool enabledWifi = wifiManager.EnableNetwork(tempConfig.NetworkId, true); 33 } 34 else 35 { 36 37 var netId = wifiManager.AddNetwork(new WifiConfiguration 38 { 39 Ssid = ("\"" + sSSID + "\""), 40 PreSharedKey = password, 41 }); 42 bool enabledWifi = wifiManager.EnableNetwork(netId, true); 43 } 44 } 45 } 46 catch (Exception ex) 47 { 48 49 } 50 }

1 public class GlobeNetworkCallbakc : ConnectivityManager.NetworkCallback 2 { 3 ConnectivityManager connMgr; 4 public GlobeNetworkCallbakc(ConnectivityManager connMgr) : base() 5 { 6 this.connMgr = connMgr; 7 } 8 9 public override void OnAvailable(Network network) 10 { 11 connMgr.BindProcessToNetwork(network); 12 //Console.WriteLine(network.ToString()); 13 base.OnAvailable(network); 14 } 15 16 public override void OnLost(Network network) 17 { 18 base.OnLost(network); 19 } 20 }
注意这个Callback,需要重写。