在Xamarin Forms Android 10中以编程方式连接到wifi

时间:2020-01-30 18:09:21

标签: c# android xamarin xamarin.forms xamarin.android

我无法在Android 10中连接到wifi。直到Android 9为止,我的代码都可以正常工作,我一直试图在Android 10上实现同样的功能,但没有任何运气:(

        private void RequestNetwork(string _ssid, string _passphrase)
        {
            var specifier = new WifiNetworkSpecifier.Builder()
                .SetSsid(_ssid)
                .SetWpa2Passphrase(_passphrase)
                .Build();

            var request = new NetworkRequest.Builder()
                .AddTransportType(TransportType.Wifi) // we want WiFi
                .RemoveCapability(NetCapability.Internet) // Internet not required
                .SetNetworkSpecifier(specifier) // we want _our_ network
                .Build();

            NetworkCallback _callback = new NetworkCallback();
            connection_manager.RequestNetwork(request, _callback);
        }

        private class NetworkCallback : ConnectivityManager.NetworkCallback
        {
            public Action NetworkAvailable { get; set; }
            //bool IsBusy = false;
            public override void OnAvailable(Network network)
            {
                base.OnAvailable(network);
                connection_manager.BindProcessToNetwork(network);
            }

            public override void OnUnavailable()
            {
                base.OnUnavailable();
            }
        }

2 个答案:

答案 0 :(得分:2)

我看到您基于注释从my blog post复制了代码。我想您已经尝试运行我在GitHub上提供的示例应用程序了?

无论如何,首先请确保已在清单中添加了以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

除了缺少权限外,您提供的代码应该可以正常工作,并向您显示如下所示的系统对话框:

Android "Connect to device" system dialog

答案 1 :(得分:0)

这是我连接wifi的代码,但问题是连接wifi上网后无法正常工作。

如果您的互联网没有出现问题,请与我们分享您的代码:

try
                {
                    var connectivityManager = Android.App.Application.Context.GetSystemService(Context.ConnectivityService) as ConnectivityManager;
                    WifiManager wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);
                    if (!wifiManager.IsWifiEnabled)
                    {
                        Forms.Context.StartActivity(new Intent(Android.Provider.Settings.ActionWifiSettings));
                        return false;
                    }

                    var callback = new NetworkCallback(connectivityManager)
                    {
                        NetworkAvailable = network =>
                        {
                            Console.WriteLine("Connected");
                            MessagingCenter.Send<string, Boolean>("ConnectModel", "connecttowifi", true);
                        },
                        NetworkUnavailable = () =>
                        {
                            Console.WriteLine("Not Connected");
                            MessagingCenter.Send<string, Boolean>("ConnectModel", "connecttowifi", false);
                        }
                    };
                    var specifier = new WifiNetworkSpecifier.Builder()
                    .SetSsid(ssid)
                    .SetWpa2Passphrase(password)
                    .Build();
                    var request = new NetworkRequest.Builder()
                        .AddTransportType(TransportType.Wifi)
                        //.AddCapability(NetCapability.Internet)
                        //.RemoveCapability(NetCapability.Internet)
                        .SetNetworkSpecifier(specifier)
                        .Build();
                    connectivityManager.RequestNetwork(request, callback);

                    return true;
                }
                catch (Exception e)
                {
                    Console.Write(e.Message);
                    return false;
                }
相关问题