Je veux vérifier la connectivité Internet dans chaque activité. S'il est perdu, un message devrait être affiché.
Quelqu'un peut-il me guider pour y parvenir?
Vous pouvez utiliser ConnectivityManager pour vérifier l'état du réseau.
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) {
// notify user you are online
}
else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) {
// notify user you are not online
}
Notez que les constantes ConnectivityManager.TYPE_MOBILE et ConnectivityManager.TYPE_WIFI représentent des types de connexion et que ces deux valeurs ne sont pas exhaustives. Voir ici pour une liste exhaustive.
Assurez-vous également que vous disposez des autorisations requises pour surveiller l'état du réseau. Vous devez ajouter cette autorisation à votre AndroidManifest.xml:
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Une seule connexion peut être active à un moment donné. Donc, une réponse plus simple est:
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
// notify user you are online
} else {
// notify user you are not online
}
Il s'adresse également à tout nouveau type de réseau tel que ConnectivityManager # TYPE_WIMAX
Assurez-vous également que vous disposez des autorisations requises pour surveiller l'état du réseau. Vous devez ajouter cette autorisation à votre AndroidManifest.xml:
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Vous pouvez le faire pour différents types d’état de réseau
public void checkNetworkStatus(){
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() ){
Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
}
else if( mobile.isAvailable() ){
Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
}
}
Vous pouvez vérifier la couverture réseau et la disponibilité des données de Mobile et wi-fi directement avec
Pour couverture du réseau disponibilité,
private boolean isNetworkAvailable()
{
ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable()));
}
Pour Disponibilité des données si réseau disponible
private boolean isDataAvailable()
{
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected()));
}
Correction
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) {
//notify user you are online
}
devrait être
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
//notify user you are online
}
Enregistrez un récepteur de radiodiffusion sur handle CONNECTIVITY_ACTION. Voir cet exemple complet . Vous devez mettre à jour une variable statique 'connectionAvailable' qui sera accessible partout et à tout moment via son getter respectif.
N'oubliez pas de déclarer le récepteur de diffusion dans le fichier manifest:
<receiver Android:name=".NetworkConnectivityReceiver" Android:enabled="true">
<intent-filter>
<action Android:name="Android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
En ce qui concerne la vérification de chaque activité, vous voudrez peut-être utiliser une BaseActivity étendue par vos activités et gérer le test de connectivité et afficher le message.
Notez également que les événements using (qui ne sont pas interrogés à partir d’activités) seront plus efficaces.
Vous n'utilisez pas correctement ConnectivityManager.getNetworkInfo(0).getState()
et ConnectivityManager.getNetworkInfo(1).getState()
au lieu de coder en dur les valeurs (1) et (0), utilisez ConnectivityManager.TYPE_WIFI
et ConnectivityManager.TYPE_MOBILE
Ceci est une vérification booléenne pour voir si vous avez un accès réseau. Il ne détermine pas quel type d'accès au réseau - mobile, wifi ..., il vérifie simplement si vous êtes en ligne.
boolean mobileNwInfo = false;
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); }
catch (NullPointerException e) { mobileNwInfo = false; }
if ( mobileNwInfo == false ) {
// Your code goes here...
}