Cela ne vérifie que si l'interface réseau est disponible, ne garantit pas qu'un service réseau particulier est disponible, par exemple, il pourrait y avoir un faible signal ou une panne de serveur
private boolean isNetworkInterfaceAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
si vous voulez établir une véritable connexion pour vous assurer que votre connexion peut récupérer des données à partir d'un serveur ou de n'importe quelle URL :
private boolean isAbleToConnect(String url, int timeout) {
try {
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(timeout);
connection.connect();
return true;
} catch (Exception e) {
Log.i("exception", "" + e.getMessage());
return false;
}
}
Cette fonction doit être enveloppée dans un thread en arrière-plan :
final String action = intent.getAction();
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
checkConnectivity(context);
}
}
private void checkConnectivity(final Context context) {
if (!isNetworkInterfaceAvailable(context)) {
Toast.makeText(context, "Vous êtes HORS LIGNE!", Toast.LENGTH_SHORT).show();
return;
}
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
final boolean isConnected = isAbleToConnect("http://www.google.com", 1000);
handler.post(new Runnable() {
@Override
public void run() {
if (isConnected)
Toast.makeText(context, "Vous êtes EN LIGNE!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, "Vous êtes HORS LIGNE!", Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
Ajoutez les autorisations requises:
Ajoutez cette ligne sous l'application dans le fichier manifeste :
android:usesCleartextTraffic="true"
Ajoutez le récepteur au fichier manifeste :
Inscrivez/Désinscrivez le BR dans votre activité :
@Override
protected void onStart() {
super.onStart();
IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(connectivityChangeReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(connectivityChangeReceiver);
}
Voici l'intégralité de la classe de diffusion :
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import java.net.URL;
import java.net.URLConnection;
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final String action = intent.getAction();
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
checkConnectivity(context);
}
}
private void checkConnectivity(final Context context) {
if (!isNetworkInterfaceAvailable(context)) {
Toast.makeText(context, "Vous êtes HORS LIGNE!", Toast.LENGTH_SHORT).show();
return;
}
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
final boolean isConnected = isAbleToConnect("http://www.google.com", 1000);
handler.post(new Runnable() {
@Override
public void run() {
if (isConnected)
Toast.makeText(context, "Vous êtes EN LIGNE!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, "Vous êtes HORS LIGNE!", Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
//Cela ne vérifie que si l'interface réseau est disponible, ne garantit pas qu'un service réseau particulier est disponible, par exemple, il pourrait y avoir un faible signal ou une panne de serveur
private boolean isNetworkInterfaceAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
//Cela établit une véritable connexion à une URL et vérifie si vous pouvez vous connecter à cette URL, cela doit être enveloppé dans un thread en arrière-plan
private boolean isAbleToConnect(String url, int timeout) {
try {
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(timeout);
connection.connect();
return true;
} catch (Exception e) {
Log.i("exception", "" + e.getMessage());
return false;
}
}
}
1 votes
Veuillez vérifier stackoverflow.com/questions/10273614/…
0 votes
Il est plus facile d'utiliser github.com/JobGetabu/DroidNet
0 votes
Essayez cette bibliothèque, tout fonctionne si bien. github.com/andrefio/Rx.Network