Maison >Java >javaDidacticiel >Comment puis-je créer un écouteur de changement de connectivité Internet fiable sous Android ?

Comment puis-je créer un écouteur de changement de connectivité Internet fiable sous Android ?

DDD
DDDoriginal
2024-10-29 10:12:021023parcourir

How can I create a reliable Internet connectivity change listener in Android?

Écouteur de changement de connectivité Internet dans Android

Le récepteur de diffusion par défaut pour les changements de connectivité surveille la disponibilité du réseau mais pas nécessairement la connectivité Internet. Pour remédier à cette limitation, explorons une approche plus complète.

Surveillance de la connectivité Internet

Utilisez la classe d'utilitaire suivante pour déterminer l'état actuel de la connexion Internet :

<code class="java">public class NetworkUtil {
  public static int getConnectivityStatus(Context context) {
    // Check for active network
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    // Determine network type (Wi-Fi, mobile, or not connected)
    if (activeNetwork != null) {
      if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
        return TYPE_WIFI;
      } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
        return TYPE_MOBILE;
      }
    }
    return TYPE_NOT_CONNECTED;
  }

  // Convert network status to string representation (Wi-Fi, mobile, or not connected)
  public static int getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    int status = 0;
    if (conn == NetworkUtil.TYPE_WIFI) {
      status = NETWORK_STATUS_WIFI;
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
      status = NETWORK_STATUS_MOBILE;
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
      status = NETWORK_STATUS_NOT_CONNECTED;
    }
    return status;
  }
}</code>

Récepteur de diffusion pour les modifications de connectivité Internet

Créez un récepteur de diffusion qui écoute les modifications de connectivité Internet :

<code class="java">public class NetworkChangeReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(final Context context, final Intent intent) {
    int status = NetworkUtil.getConnectivityStatusString(context);
    if ("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) {
      if (status == NetworkUtil.NETWORK_STATUS_NOT_CONNECTED) {
        // Handle loss of Internet connection
      } else {
        // Handle recovery of Internet connection
      }
    }
  }
}</code>

Configuration AndroidManifest.xml

Déclarez le récepteur de diffusion et les autorisations nécessaires dans AndroidManifest.xml :

<code class="xml"><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<receiver
    android:name="NetworkChangeReceiver"
    android:label="NetworkChangeReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver></code>

En mettant en œuvre cette approche, vous pouvez surveiller les changements de connectivité Internet et réagir en conséquence, garantissant ainsi la stabilité du Web fonctionnalité de l'application dans des scénarios de perte soudaine de connectivité Internet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn