J'utilise le code suivant pour vérifier la connexion Internet dans 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 à l'aide de la touche F8, je recevrai "L'APPLICATION MORTUAIRE A ARRÊTÉ" , et je ne reçois aucune impression dans logcat
.
Puis-je savoir quelle est l'erreur que je fais?
REMARQUE: Si vous ciblez Android N Preview. Le récepteur ci-dessus ne fonctionnera pas selon les contraintes restreintes par Google.
Lien: https://developer.Android.com/preview/features/background-optimization.html#connectivity-action
Utilisez: WorkManager ou JobScheduler pour cela.
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, vérifiez 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);
}
}
Le code ci-dessus ne fonctionnait pas correctement pour la connexion Wi-Fi. Ceci est le Modifié
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
à l'intérieur de la balise d'application de 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. ");
}
}
Les applications ciblant Android 7.0 (API niveau 24) et plus 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 ce contexte est toujours valable.