Question malheureusement, l'application est arrêtée pendant la vérification du réseau


J'utilise le code suivant pour vérifier le connexion Internet à travers mon application.

public class ConnectionChangeReceiver extends BroadcastReceiver
{
  @Override
  public void onReceive( Context context, Intent intent )
  {
    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService( Context.CONNECTIVITY_SERVICE );
    NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
    NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE );

    if (activeNetInfo != null)
    {
        Toast.makeText( context, "Active Network Type : " + 
                       activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
    }
    if(mobNetInfo != null)
    {
        Toast.makeText( context, "Mobile Network Type : " + 
                          mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
    }
  }
}

Et j'ai défini l'autorisation requise dans le fichier manifeste.

Chaque fois que j'essaie de déconnecter / connecter le réseau en utilisant la touche F8 je recevrai "UNFORTUNATELY APP A STOPPED", et je ne reçois aucune impression logcat.

Puis-je savoir quelle est mon erreur?


17
2018-03-21 11:50


origine


Réponses:


Avez-vous ajouté ceci dans AndroidManifest.xml?

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

Si vous avez ajouté ci-dessus, cochez ce code:

<receiver android:name=".UpdateReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

et

public class UpdateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

          ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE );
          NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
          boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();   
          if (isConnected)       
              Log.i("NET", "Connected" + isConnected);   
          else 
              Log.i("NET", "Not Connected" + isConnected);
    }
}

REMARQUE: si vous ciblez Android N Preview. Le récepteur ci-dessus ne fonctionnera pas comme restreint par Google.

Lien: https://developer.android.com/preview/features/background-optimization.html#connectivity-action


63
2018-03-21 11:58



Le code ci-dessus ne fonctionnait pas correctement pour la connexion wi-fi. Ceci est le modifié

SIMPLE

. androidmanifest.xml

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

balise d'application interne d'androidmanifest.xml

<receiver android:name="android.YOUR-JAVA-CLASS-PATH.BackgroundSync" android:enabled="true">
      <intent-filter>
          <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
      </intent-filter>
</receiver>

BackgroundSync.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager; 
import android.util.Log;
import android.widget.Toast;

public class BackgroundSync extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm.getActiveNetworkInfo()!=null){
            Toast.makeText(context, "Connected to Internet", Toast.LENGTH_LONG).show();
        }
        else Log.i("INTERNET","---------------------> Internet Disconnected. ");
    }
}

6
2018-05-06 07:07



Les applications ciblant Android 7.0 (API niveau 24) et versions ultérieures ne reçoivent pas cette diffusion si elles déclarent le récepteur de diffusion dans leur manifeste. Les applications recevront toujours des diffusions si elles enregistrent leur BroadcastReceiver avec Context.registerReceiver () et que ce contexte est toujours valide.

https://developer.android.google.cn/reference/android/net/ConnectivityManager.html?hl=zh-cn#CONNECTIVITY_ACTION


0
2017-07-05 04:04