0

I have a utility class to show a snackbar when there is no internet.

My snackbar code:

  public void noInternetSnackBar(Activity activity){
        Snackbar snackbar = Snackbar.make(activity.findViewById(android.R.id.content), "Your internet is not working", Snackbar.LENGTH_INDEFINITE);
        snackbar.setActionTextColor(Color.YELLOW);
        snackbar.setAction("Settings", v -> {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setComponent(new ComponentName("com.android.settings",
                    "com.android.settings.Settings$DataUsageSummaryActivity"));
            snackbar.dismiss();
            activity.startActivity(intent);
        });
        snackbar.show();
    }

This is how I call it:

new Util().noInternetSnackBar(this);

The duration is infinite and the snackbar is dismissed when the user clicks the action button which fires an intent to the internet settings. I works perfectly but if the user just pulls down the status bar and turns on the internet without using my action the snackbar stays there waiting for the user input. How do I dismiss the snackbar. Short or long duration are not an option in this case.

  • Use a Network change `BroadcastReceiver` and Hold the Reference to `SnackBar` and `dismiss()` it if netwrok available. – ADM Jun 20 '18 at 14:35
  • Follow [This thread](https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app). – ADM Jun 20 '18 at 14:36

1 Answers1

1

Return the reference fro Util Class.

  public Snackbar noInternetSnackBar(Activity activity){
    Snackbar snackbar = Snackbar.make(activity.findViewById(android.R.id.content), "Your internet is not working", Snackbar.LENGTH_INDEFINITE);
    snackbar.setActionTextColor(Color.YELLOW);
    snackbar.setAction("Settings", v -> {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setComponent(new ComponentName("com.android.settings",
                "com.android.settings.Settings$DataUsageSummaryActivity"));
        snackbar.dismiss();
        activity.startActivity(intent);
    });
    snackbar.show();
    return snackbar;
}

Save it Globally and dismiss it if network available.

private Snackbar snackbar;
snackbar=new Util().noInternetSnackBar(this);

BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        NetworkInfo info = (NetworkInfo) extras.getParcelable("networkInfo");
        NetworkInfo.State state = info.getState();
        if (state == NetworkInfo.State.CONNECTED) {
                if(snackbar!=null){
                    snackbar.dismiss();
                }
        }

    }
};

Use static Utility methods for sake of simplicity and usability i.e make noInternetSnackBar static .

ADM
  • 20,406
  • 11
  • 52
  • 83