1

Android アプリのダイアログ ボックスを作成します。うまく機能していますが、ダイアログボックスに関連するいくつかの問題が発生しました。

(1) インターネット接続または WiFi が接続されたときに欲しい。ダイアログボックスが自動的に消えます。

(2) インターネット接続が失われた場合、アプリが実行されている途中。ダイアログボックスが再び自動的に表示されます。

if (!isConnected(Dashboard.this)) buildDialog(Dashboard.this).show();
        else {
            setContentView(R.layout.activity_dashboard);
        }
 public boolean isConnected(Context context) {

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netinfo = cm.getActiveNetworkInfo();

        if (netinfo != null && netinfo.isConnectedOrConnecting()) {
            android.net.NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            android.net.NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

            if ((mobile != null && mobile.isConnectedOrConnecting()) || (wifi != null && wifi.isConnectedOrConnecting()))
                return true;
            else return false;
        } else
            return false;
    }

    public AlertDialog.Builder buildDialog(Context c) {

        AlertDialog.Builder builder = new AlertDialog.Builder(c);
        builder.setTitle("No Internet Connection");
        builder.setMessage("You need to have Mobile Data or WiFi to access this. Press OK to Exit");
        builder.setCancelable(false);

        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                Dashboard.super.onBackPressed();
            }
        });

        return builder;
    } 
4

6 に答える 6

1

インターネット接続イベントを自動的に取得するには、ネットワーク変更リスナーを設定してみてください。以下にサンプルを示します。

/**
 * Broadcast receiver that detects receives notification when change in internet connection to alert when there is no Internet.
 */

public class NetworkChangeReceiver extends BroadcastReceiver {

    private NetworkChangeListener mListener;

    public NetworkChangeReceiver(NetworkChangeListener listener) {
        mListener = listener;
    }

    @Override
    public void onReceive(final Context context, @NonNull final Intent intent) {

        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();

            boolean connected = activeNetwork != null && activeNetwork.isConnected();
            mListener.onNetworkConnectedStateChanged(connected);
        }
    }

    public interface NetworkChangeListener {
        void onNetworkConnectedStateChanged(boolean connected);
    }
}

次に、アクティビティまたはフラグメントにリスナーを登録します

@Override
    public void onStart() {
        super.onStart();

        if (mNetworkChangeReceiver == null) {
            mNetworkChangeReceiver = new NetworkChangeReceiver(this);
            getContext().registerReceiver(mNetworkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        }
    }

次に、ネットワーク接続状態が変更されたときにダイアログを表示/閉じる

@Override
    public void onNetworkConnectedStateChanged(boolean connected) {
        if (connected) {
            //dismiss dialog
        } else {
            //show dialog
        }
    }
于 2019-06-05T07:10:54.003 に答える
1

builder.setCancelable(false);アラート ダイアログでプロパティを使用する

于 2019-06-05T05:37:34.700 に答える
1

この行をアラート ダイアログ コードから外します。

alertDialog.setCancelable(false);
于 2019-06-05T05:38:03.293 に答える
0

接続ステータスを取得するには、ブロードキャスト レシーバーを追加する必要があります。

次に、ビルダーをグローバルに保つ必要があります。

private AlertDialog.Builder builder;
于 2019-06-05T06:00:08.087 に答える