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; }
6 Réponses :
Utilisez les propriétés builder.setCancelable (false);
dans votre journal de bord
Mettez cette ligne en dehors du code de dialogue d'alerte
alertDialog.setCancelable(false);
Merci. pouvez-vous me donner la solution de ma 2ème et 3ème requête également.
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);
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;
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); } }
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 ...
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