Подключение к Wi-Fi программно в Xamarin Forms Android 10 - PullRequest
0 голосов
/ 30 января 2020

Я не могу подключиться к Wi-Fi в Android 10. У меня есть код работает до 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 ]

2 голосов
/ 31 января 2020

Я вижу, что вы скопировали код из моего блога на основе комментариев. Я полагаю, вы пытались запустить пример приложения, которое я предоставил на 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

0 голосов
/ 27 февраля 2020

Вот мой код для подключения Wi-Fi, но проблема заключается в том, что после подключения Wi-Fi inte rnet не работает.

Если проблема с inte rnet не возникла, то поделитесь с нами своим кодом :

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;
                }
...