1

Pour une raison quelconque, mon récepteur de changement de réseau ne fonctionne pas et envoie un CONNECTIVITY_CHANGE à ma classe NetworkStateReceiver dans mon application Android. J'ai vérifié pour voir si c'est simplement un problème avec ma boîte de dialogue, mais les Log.d qui sont censés imprimer ne sont pas.La modification de la connectivité Internet ne se produit pas

Voici le code pour AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<receiver android:name="com.main.main.NetworkStateReceiver"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 

Voici le code pour NetworkStateReceiver.java:

package com.main.main; 

import android.app.AlertDialog; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 

public class NetworkStateReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(final Context context, final Intent intent) { 
    final AlertDialog dialog = new AlertDialog.Builder(context) 
      .setTitle("Connection Failed") 
      .setMessage("Please Check Your Internet Connection") 
      .setPositiveButton("Try Again", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        //Code for try again 
       } 
      }) 
      .setNegativeButton("Exit", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 

       } 
      }).create(); 
    if (intent.getExtras() != null) { 
     final ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); 
     if (ni != null && ni.isConnectedOrConnecting()) { 
      Log.d("INTERNET_MESSAGE", "Connected to internet"); 
      dialog.dismiss(); 
     } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { 
      Log.d("INTERNET_MESSAGE", "Disconnected from internet"); 
     } 
    } 
} 

}

+2

où est dialog.show(); ?? les journaux ne s'affichent pas car les deux conditions ne sont pas vraies, mettez-en d'autres à la fin et vérifiez à nouveau. –

+0

@DhawalSodhaParmar OK, j'ai ajouté un autre à la fin avec un journal, et le journal est en train d'imprimer. Pourriez-vous coller un if révisé et sinon si le bloc fonctionnerait pour déterminer s'il y a une connexion Internet ou non? – fedorp1

+0

cochez une de mes réponses http://stackoverflow.com/a/15546897/1168654 –

Répondre

2

Il est préférable de vérifier la connectivité Internet comme suit:

Il suffit de faire une fonction commune dans une classe d'Utilitaires communs comme

/* 
* A Common function to check internet connection. 
* */ 
public static boolean isOnline(Context c) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Maintenant, utilisez où vous devez connexion Internet dans votre code comme ci-dessous:

 if (isOnline(YourActivity.this)) { 
      //Your Tasks.. 
     } else { 
      //Display your AlertBox.. 
     } 
1

Vous devez activer votre récepteur manifeste .. il fonctionnera ..

<receiver android:name="com.main.main.NetworkStateReceiver" 
      android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 
+0

bonne capture ... mais 'android: enabled' est vrai par défaut et laisse juste le système android instancier le récepteur. Je pense que vous vouliez dire 'android: export'', ce qui permet au récepteur d'obtenir des événements provenant de l'extérieur de l'application (ce dont OP a besoin). Ajout à ma réponse – rothloup

+0

avez-vous enregistré et désinscrit votre auditeur dans votre cycle de vie de l'activité? – user2906641