Отключить отображаемую закуску в другом мероприятии

У меня есть служебный класс, чтобы показать закусочную, когда нет интернета.

Код моей закусочной:

  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();
    }

Вот как я это называю:

new Util().noInternetSnackBar(this);

Продолжительность бесконечна, и закусочная закрывается, когда пользователь нажимает кнопку действия, которая запускает намерение в настройках Интернета. Я работаю отлично, но если пользователь просто опускает строку состояния и включает Интернет, не используя мое действие, закусочная остается там, ожидая ввода пользователя. Как мне закрыть закусочную. Краткосрочная или длительная работа в этом случае невозможна.


person Community    schedule 20.06.2018    source источник
comment
Используйте изменение сети BroadcastReceiver и удерживайте ссылку на SnackBar и dismiss(), если сеть доступна.   -  person ADM    schedule 20.06.2018
comment
Следуйте этой ветке.   -  person ADM    schedule 20.06.2018


Ответы (1)


Верните ссылку на 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;
}

Сохранить глобально и закрыть, если сеть доступна.

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();
                }
        }

    }
};

Используйте статические служебные методы для простоты и удобства использования, т.е. сделайте noInternetSnackBar статическим.

person ADM    schedule 20.06.2018