Comment vérifier que le réseau est disponible ou non sur un périphérique Android par programmation, ce qui envoie un message ou un message de grillage lorsque nous essayons de nous connecter à un réseau tel que Wifi & 3G.
POUR vérifier si le réseau 3G ou WiFi est disponible, nous pouvons utiliser les méthodes ci-dessous pour vérifier avant de commencer nos activités
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
//For 3G check
boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.isConnectedOrConnecting();
//For WiFi Check
boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
System.out.println(is3g + " net " + isWifi);
if (!is3g && !isWifi)
{
Toast.makeText(getApplicationContext(),"Please make sure your Network Connection is ON ",Toast.LENGTH_LONG).show();
}
else
{
" Your method what you want to do "
}
J'espère que cela aidera quelqu'un.
final ConnectivityManager connMgr = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
final Android.net.NetworkInfo wifi =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final Android.net.NetworkInfo mobile =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){
Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
}
else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){
Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
}
ce code vérifie si vous êtes avec wifi ou 3g ou rien, dans le cas où le wifi est activé mais pas connecté à un réseau ou 3g ont un problème de signal
Ce travail pour moi
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
String name networkInfo.getTypeName();
Vous pouvez utiliser cette méthode pour vérifier si votre connexion Internet est 2G, 3G ou 4G :
public String getNetworkClass(Context context) {
TelephonyManager mTelephonyManager = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
int networkType = mTelephonyManager.getNetworkType();
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_Edge:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return "2G";
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "3G";
case TelephonyManager.NETWORK_TYPE_LTE:
return "4G";
default:
return "Unknown";
}
}
Et en appliquant la méthode suivante, vous pouvez vérifier si internet est disponible ou pas , et savoir si vous accédez à Internet via un réseau mobile ou WiFi :
public String getNetworkType(Context context){
String networkType = null;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
networkType = "WiFi";
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
networkType = "Mobile";
}
} else {
// not connected to the internet
}
return networkType;
}
La réponse de Rahul Baradia inclut manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
et elle est obsolète.
Vous trouverez ci-dessous une solution améliorée pour le dernier SDK Android.
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
boolean is3gEnabled = false;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
Network[] networks = connManager.getAllNetworks();
for(Network network: networks)
{
NetworkInfo info = connManager.getNetworkInfo(network);
if(info!=null) {
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
is3gEnabled = true;
break;
}
}
}
}
else
{
NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if(mMobile!=null)
is3gEnabled = true;
}
Utilisez le code suivant en tant que NetworkChecker.Java & réutilisez-le dans votre code :
package das.soumyadip.util;
import Android.net.ConnectivityManager;
import Android.util.Log;
public class NetworkChecker {
private final static String TAG = "NwtworkChecker";
public static boolean isNetworkConnected(
final ConnectivityManager connectivityManager) {
boolean val = false;
Log.d(TAG, "Checking for Mobile Internet Network");
final Android.net.NetworkInfo mobile = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobile.isAvailable() && mobile.isConnected()) {
Log.i(TAG, "Found Mobile Internet Network");
val = true;
} else {
Log.e(TAG, "Mobile Internet Network not Found");
}
Log.d(TAG, "Checking for WI-FI Network");
final Android.net.NetworkInfo wifi = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi.isAvailable() && wifi.isConnected()) {
Log.i(TAG, "Found WI-FI Network");
val = true;
} else {
Log.e(TAG, "WI-FI Network not Found");
}
return val;
}
}
Nous pouvons utiliser ConnectivityManager Class pour toute information relative au réseau.
Il avertit également les applications lorsque la connexion réseau change . Obtenez une instance de cette classe en appelant
Les principales responsabilités de cette classe sont les suivantes:
Fonction GetNetworkInfo renvoie les informations d'état relatives à un type de réseau particulier.
Cette méthode nécessite que l'appelant détienne l'autorisation
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
/**
* Checks the type of data connection that is currently available on the device.
*
* @return <code>ConnectivityManager.TYPE_*</code> as a type of internet connection on the
*This method does not support multiple connected networks
* of the same type.
* device. Returns -1 in case of error or none of
* <code>ConnectivityManager.TYPE_*</code> is found.
**/
-
public static int getDataConnectionType(Context ctx) {
ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null && connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null) {
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) {
return ConnectivityManager.TYPE_MOBILE;
} else if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
return ConnectivityManager.TYPE_WIFI;
} else
return -1;
} else
return -1;
}
// TODO Auto-generated method stub
ConnectivityManager connMgr =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
final Android.net.NetworkInfo mobile = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobile.isAvailable() && mobile.isConnected()) {
Log.i(TAG, "Found Mobile Internet Network");
val = true;
}
// Checks the user prefs and the network connection. Based on the result, decides
// whether
// to refresh the display or keep the current display.
// If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
if (WIFI.equals(sPref) && networkInfo != null
&& networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// If device has its Wi-Fi connection, sets refreshDisplay
// to true. This causes the display to be refreshed when the user
// returns to the app.
refreshDisplay = true;
Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();
// If the setting is ANY network and there is a network connection
// (which by process of elimination would be mobile), sets refreshDisplay to true.
}
}
else if (ANY.equals(sPref) && networkInfo != null) {
refreshDisplay = true;
// Otherwise, the app can't download content--either because there is no network
// connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there
// is no Wi-Fi connection.
// Sets refreshDisplay to false.
} else {
refreshDisplay = false;
Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
}
je ne vois dans aucun des codes ci-dessus si getNetworkInfo () a renvoyé la valeur null, ce qui se produit conformément à la documentation lorsque le type de réseau demandé n'est pas pris en charge. cela suggère que, sur les appareils sans 3g, l'application se bloquera avec une exception de pointeur nulle.