when i open my android app when no WiFi connected it show no WiFi connected as i given in the code

but when i connect my app with the WiFi it still show no WiFi connected , so i have to close the app and open it again with WiFi connected.

if (wifimanager.setWifiEnabled(true)) {
      punchin.setOnClickListener {

          if ((conMgr.activeNetworkInfo != null) && (wifi.isAvailable == true && wifi.isConnected == true)) {

              Log.v("MAc", "mac=" + wMAC + "\n" + wbssid + "\n" + wssid)

              if ((wbssid == "") && (wssid.equals(""))
                      && conMgr.activeNetworkInfo != null && conMgr.activeNetworkInfo.isAvailable
                      && conMgr.activeNetworkInfo.isConnected) {

                  textView.text = "Connected to correct Wifi"
                  punchout.visibility = View.VISIBLE

              } else if (wbssid!="") {

                  Toast.makeText(applicationContext, "Connect To Correct Wifi", Toast.LENGTH_LONG).show()
              }
          } else {

              Toast.makeText(this, "No Wifi Connection", Toast.LENGTH_LONG).show()
          }
      }
  }

2 answers

  • answered 2018-11-08 08:32 Farman Ali Khan

    You need to add a receiver if you want to listen connection change status . Check code below -

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            checkWifiConnectionStatus();
            registerBroadCastReceiver();
        }
    
    
        private void registerBroadCastReceiver() {
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
            registerReceiver(receiver, intentFilter);
        }
    
        private void checkWifiConnectionStatus() {
            WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    
            if (wifiMgr.isWifiEnabled()) {
                WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
    
                if (wifiInfo.getNetworkId() == -1) {
                    Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
                    return;
                }
                Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
                return;
            } else {
                Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
                return;
            }
        }
    
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                checkWifiConnectionStatus();
            }
        };
    

  • answered 2018-11-08 09:19 Raza

    register the broadcast receiver inside your activity and within that receiver monitor the status of connection by connectivity manager when connection status changes call the method to perform your task.

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           BroadcastReceiver  netReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
                    if (isConnected) {
                        try {
                            performTask(isConnected);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        performTask(isConnected);
                    }
                }
            };
        }
    
    
    
    public void performTask(boolean isConnected) {
            if (isConnected) {
                Log.i("test", "connection successfull");
            } else {
                Log.i("test", "connection failed");
            }
        }
    

    and add the following permissions in menifest

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