I can't get the ssid of WiFi connected with android12

Viewed 431

My code before android Q is here, but for android Q this function returns "unknownssid". For Android 12, I know I need to use this ConnectivityManager.NetworkCallback and ConnectivityManager # getNetworkCapabilities and ConnectivityManager # getLinkProperties, but I can't find the sample code. To display the ssid, I need to set "ConnectivityManager.NetworkCallback.FLAG_INCLUDE_LOCATION_INFO" in the argument of ConnectivityManager.NetworkCallback, but I don't know how to set it. If anyone knows, please teach me.

We are modifying programs and developing apps. We are developing an app that connects to public WiFi, Currently, we are supporting android12.

3 Answers

It can be passed as a parameter for NetworkCallback(). Here is the code snippet,

    val callback = ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {
                override fun onAvailable(network: Network) { 
                    super.onAvailable(network)
                    //network available
                }

                override fun onLost(network: Network) {
                    super.onLost(network)
                    //network unavailable
                }
            }
    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifiManager.setWifiEnabled(true);

    if (checkSelfPermission(CoarseLocation) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 123);
    }

    if (checkSelfPermission(AccessWifi) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.ACCESS_WIFI_STATE}, 123);
    }

    if (checkSelfPermission(ChangeWifi) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.CHANGE_WIFI_STATE}, 123);
    }

    if (checkSelfPermission(Dump) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.DUMP, Manifest.permission.DUMP}, 123);
    }

    if (null != wifiManager) {
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED){
            TextView tv = binding.sampleText;

            String ssid      = " SSID:            " + wifiInfo.getSSID() + "\n";
            String bssid     = " BSSID:           " + wifiInfo.getBSSID() + "\n";
            String rssi      = " RSSI:            " + wifiInfo.getRssi() + "\n";
            String lnk       = " Link Speed:      " + wifiInfo.getLinkSpeed() + "\n";
            String lnkmxrx   = " Link MxRx Speed: " + wifiInfo.getMaxSupportedRxLinkSpeedMbps() + "\n";
            String lnkmxtx   = " Link MxTx Speed: " + wifiInfo.getMaxSupportedTxLinkSpeedMbps() + "\n";
            String lnkrx     = " Link Rx Speed:   " + wifiInfo.getRxLinkSpeedMbps() + "\n";
            String lnktx     = " Link Tx Speed:   " + wifiInfo.getTxLinkSpeedMbps() + "\n";

            tv.setText(ssid + bssid + rssi + lnk + lnkmxrx + lnkmxtx + lnkrx + lnktx);

            //tv.setText("Output :"+"\n"+runAsRoot());
        }

adding below code will invoke to take permission from user and now working for me.

   if (checkSelfPermission(CoarseLocation) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 123);
    }

    if (checkSelfPermission(AccessWifi) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.ACCESS_WIFI_STATE}, 123);
    }
    if (checkSelfPermission(ChangeWifi) != PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]{Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.CHANGE_WIFI_STATE}, 123);
    }
Related