关闭另一个 activity 显示的快餐栏

Dismiss snackbar shown from another activity

我有一个实用程序 class 可以在没有互联网时显示小吃店。

我的小吃店代码:

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

持续时间是无限的,当用户单击触发 Internet 设置意图的操作按钮时,快餐栏将被关闭。我工作得很好,但如果用户只是拉下状态栏并打开互联网而不使用我的操作,则小吃店会留在那里等待用户输入。我如何关闭小吃店。在这种情况下,短期或长期都不是一个选项。

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

    }
};

为了简单和易用性,使用静态 Utility 方法,即使 noInternetSnackBar 静态。