Search code examples
javaandroiduser-interfacebroadcastreceiver

How to update the UI with BroadcastReceiver onReceive in Android?


I want to update the UI according to the WiFi status in my Android app in Java. I am unable to update the UI to show the new string. Please help me.

Here is my code

public class MainActivity extends AppCompatActivity {
    IntentFilter intentFilter = new IntentFilter();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(new NetworkConnectionReceiver(), intentFilter);

        TextView displayStatus = findViewById(R.id.displayStateTextView);
    }
}

class NetworkConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        Log.i("MyReceiver", Boolean.toString(wifiManager.isWifiEnabled()));
    }
}

Solution

  • Use this code:

    public class MainActivity extends AppCompatActivity {
    ...
    
        BroadcastReceiver br = new BroadcastReceiver(){
            @Override
            public void onReceive( Context context, Intent intent ){
               //update UI here directly
               View view = findViewById( R.id.example );
            }
        };
    
        @Override
        protected void onResume(){
            super.onResume();
            // Check state here
            ...
            IntentFilter filter = new IntentFilter();
            filter.addAction( ConnectivityManager.CONNECTIVITY_ACTION );
            registerReceiver( br, filter);
        }
    
        @Override
        protected void onPause(){
            super.onPause();
            unregisterReceiver( br );
        }
    
    ...
    }