Skip to main content

Command Palette

Search for a command to run...

Android Q programmatically connect to different WiFi AP for internet, internet and autoconnect not working

Updated
1 min read

https://issuetracker.google.com/issues/138335744


 public static CompletableFuture<String> connectWifi(MainActivity context, String ssid, String password) {
        CompletableFuture<String> future = new CompletableFuture<>();
        try {
               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

                System.out.println("Device is above Android 10....");
                WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
                        .setSsid(ssid)
                        .setWpa2Passphrase(password)
                        .build();

                NetworkRequest networkRequest = new NetworkRequest.Builder()
                        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                        .setNetworkSpecifier(wifiNetworkSpecifier)
                        .build();

                ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivityManager != null) {
                    connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
                        @Override
                        public void onAvailable(Network network) {
                            Log.d(TAG, "Network is available: " + network);
                            connectivityManager.bindProcessToNetwork(network);
                            future.complete("connected");
                        }

                        @Override
                        public void onUnavailable() {
                            Log.d(TAG, "Network is unavailable");
                            future.complete("notConnected");
                        }

                        @Override
                        public void onLosing(Network network, int maxMsToLive) {
                            Log.d(TAG, "Network is losing with maxMsToLive: " + maxMsToLive);
                            future.complete("networkLoosing");
                        }

                        @Override
                        public void onLost(Network network) {
                            Log.d(TAG, "Network is lost: " + network);
                            System.out.println("fix working....");
                            connectivityManager.bindProcessToNetwork(null);
                            future.complete("networkLost");
                        }
                    });
                } else {
                    future.complete("notConnected");
                }
            } else {
                Log.d(TAG, "Android level is low so Executing legacy method");
                future.complete(connectToWifiLegacy(context, ssid, password));
            }
        } catch (Exception e) {
            e.printStackTrace();
            future.completeExceptionally(e);
        }
        return future;
    }

More from this blog

《一本书看懂新能源汽车》读书笔记

什么是新能源汽车? 新能源汽车是指采用新型动力系统,完全或者主要依靠新型能源驱动的汽车,包括插电式混合动力(含增程式)汽车、纯电动汽车和燃料电池汽车等。 什么是串联式混合动力汽车? 一男一女两个人骑单人自行车,男人(电动机)负责踩踏板,女人(发动机)坐在后座无法踩踏板,但是可以在男人累的时候给他喂口水喝(给电动机输入电能),如此驱动车辆继续前行。 什么是并联式混合动力汽车? 一男一女两个人骑双人自行车,男人(电动机)负责踩前踏板,女人(发动机)负责踩后踏板,二人合力驱动自行车前行;这个...

Jun 1, 20241 min read
《一本书看懂新能源汽车》读书笔记

2024 Jia Xianhua

16 posts