1
votes

Comment faire disparaître la boîte de dialogue lorsque Internet ou WiFi se connecte. et vice versa?

Je crée la boîte de dialogue de mon application Android. Cela fonctionne bien, mais j'ai rencontré des problèmes liés à la boîte de dialogue.

(1) Je veux quand la connexion Internet ou le WiFi se connectent. automatiquement la boîte de dialogue disparaît.

(2) Au milieu de l'application est en cours d'exécution si la connexion Internet est perdue. la boîte de dialogue apparaît à nouveau automatiquement.

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


2 commentaires

Pour ce problème, la boîte de dialogue disparaît lorsque je clique en dehors de la boîte de dialogue. vous pouvez utiliser builder.setCancelable (false);


Vos deux points dont vous avez besoin pour utiliser le récepteur de diffusion pour la connexion réseau. Dans lequel vous obtenez l'état de la connexion réseau CONNECTED , DISCONNECTED


6 Réponses :


1
votes

Utilisez les propriétés builder.setCancelable (false); dans votre journal de bord


0 commentaires

1
votes

Mettez cette ligne en dehors du code de dialogue d'alerte

alertDialog.setCancelable(false);


1 commentaires

Merci. pouvez-vous me donner la solution de ma 2ème et 3ème requête également.



0
votes

Vous devez setCancelable == false pour arrêter le basculement en dehors de la boîte de dialogue.

Dans votre cas, vous devez mettre comme ça dans votre AlertDialog.Builder après setMessage

builder.setCancelable (false);

et utilisez cette fonctionnalité pour l'utilisateur qui, sur le bouton Backpress, vous devez setCancelable == true

pour cela, vous devez écrire du code dans onBackPressed comme ceci: -

builder.setCancelable (true);


0 commentaires

0
votes

Vous devez ajouter un récepteur de diffusion pour obtenir l'état de la connectivité.

Ensuite, vous devez garder le générateur global.

private AlertDialog.Builder builder;


0 commentaires

1
votes

Pour obtenir automatiquement les événements de connectivité Internet, essayez de configurer un écouteur de changement de réseau. Voici un exemple:

@Override
    public void onNetworkConnectedStateChanged(boolean connected) {
        if (connected) {
            //dismiss dialog
        } else {
            //show dialog
        }
    }

Vous enregistrez ensuite l'auditeur dans votre activité ou fragment

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

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

Ensuite, affichez / fermez votre boîte de dialogue sur le réseau connecté état changé

/**
 * 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);
    }
}


0 commentaires

0
votes

Créez simplement un BroadcastReceiver pour suivre votre connectivité Internet.

D'abord, créez une classe NetworkChangeReceiver comme celle-ci

    private BroadcastReceiver mNetworkReceiver;

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

         //init broadcast receiver
            mNetworkReceiver = new NetworkChangeReceiver();
        }

  @Override
    protected void onResume() {
        super.onResume();
        if (((NetworkChangeReceiver) mNetworkReceiver).isOnline(mContext)) {
        } else {
            registerNetworkBroadcastForNougat();
        }
    }

 private void registerNetworkBroadcastForNougat() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            try {
                registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
            } catch (Exception e) {
                Log.i(getClass().getName(), "easdfdf" + e.toString());
            }
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
            } catch (Exception e) {
                Log.i(getClass().getName(), "easdfdfdd" + e.toString());
            }
        }
    }

    protected void unregisterNetworkChanges() {
        try {
            unregisterReceiver(mNetworkReceiver);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterNetworkChanges();
    }

après cela, ajoutez simplement le code ci-dessous dans la balise application qui se trouve dans AndroidMenifest.xml

   <receiver android:name=".utils.NetworkChangeReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

Dernière étape

créez simplement votre instance BroadcastReceiver dans votre activité où vous vérifiez l'activité Internet

 public class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                if (isOnline(context)) {
                   //show dialog when internet on
                    dialogHome(true);

                    Log.e("pradeep", "Online Connect Internet ");
                } else {
                  //hide dialog when internet off
                    dialogHome(false);

                    Log.e("pradeep", "Connectivity Failure !!");
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
                Log.i(getClass().getName(), "exceptional " + e.toString());
            }
        }

        public boolean isOnline(Context context) {
            try {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                //should check null because in airplane mode it will be null
                return (netInfo != null && netInfo.isConnected());
            } catch (NullPointerException e) {
                e.printStackTrace();
                return false;
            }
        }
    }

chaque fois que la connexion Internet change, appelez la méthode BroadcastReceiver onReceive.

J'espère utile pour vous ...


0 commentaires