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 }
View Code
 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     }
View Code

注意这个Callback,需要重写。

posted @ 2025-04-09 15:45  醉梦ai天涯  阅读(19)  评论(0)    收藏  举报