J'ai une application qui met à jour la base de données chaque fois que le téléphone est connecté au WiFi. J'ai implémenté Service
et BroadcastReceiver
qui exécutera Service
(il me dira quel réseau est utilisé), mais le problème est que je ne sais pas quoi ajouter dans le fichier manifest
pour démarrer BroadcastReceiver
lorsque l'état du réseau change il se connecte à une sorte de réseau
Vous avez besoin
<intent-filter>
<action Android:name="Android.net.wifi.WIFI_STATE_CHANGED"/>
<action Android:name="Android.net.wifi.STATE_CHANGE"/>
</intent-filter>
Dans votre balise receiver
.
Ou, si vous souhaitez davantage de contrôle, avant d’enregistrer BroadcastReceiver
, configurez-le:
final IntentFilter filters = new IntentFilter();
filters.addAction("Android.net.wifi.WIFI_STATE_CHANGED");
filters.addAction("Android.net.wifi.STATE_CHANGE");
super.registerReceiver(yourReceiver, filters);
WIFI_STATE_CHANGED
Broadcast <intent-action>
indiquant que le Wi-Fi a été activé, désactivé, activé, désactivé ou inconnu. Un extra fournit cet état en tant que int. Un autre extra fournit l'état précédent, s'il est disponible.
STATE_CHANGE
Broadcast <intent-action>
indiquant que l'état de la connectivité Wi-Fi a changé. Un extra fournit le nouvel état sous la forme d'un objet NetworkInfo. Si le nouvel état est CONNECTED, des extras supplémentaires peuvent fournir les identificateurs BSSID et WifiInfo du point d'accès. comme une chaîne
En outre, vous devez spécifier les autorisations appropriées dans la balise manifest
:
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
Pour vérifier la connectivité, vous pouvez utiliser ConnectivityManager
car il vous indique le type de connexion disponible.
ConnectivityManager conMngr = (ConnectivityManager)this.getSystemService(this.CONNECTIVITY_SERVICE);
Android.net.NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
Android.net.NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
C’est ce que je fais pour être averti lorsque la connexion a changé .. Vous définissez une BroadCastReceiver
pour recevoir la diffusion.
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() ||
mobile != null && mobile.isConnectedOrConnecting();
if (isConnected) {
Log.d("Network Available ", "YES");
} else {
Log.d("Network Available ", "NO");
}
}
}
Vous devez également définir la variable BroadcastReceiver
dans votre fichier manifeste et filtrer par ConnectivityChange
.
<receiver Android:name=".NetworkChangeReceiver" >
<intent-filter>
<action Android:name="Android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Source ici
Vous devez créer une BroadcastReceiver
qui sera déclenchée lorsque l'état de la connectivité aura changé:
Ici Même question Comment vérifier périodiquement la connexion Internet dans l’ensemble de l’application?
Pour compléter la réponse de @ Dantalian. À partir d'Android Nougat, vous ne devez pas déclarer votre récepteur sur votre manifeste, car il ne recevra pas la diffusion CONNECTIVITY_ACTION
. Vous devriez plutôt enregistrer votre récepteur en utilisant la méthode Context.registerReceiver(Receiver, Intent)
.
Lien vers la source ici
Déclarer le filtre d'intention à transmettre au destinataire de la diffusion
IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
Dans le récepteur de radiodiffusion, recherchez EXTRA_WIFI_STATE;
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action)
{
case WifiManager.WIFI_STATE_CHANGED_ACTION:
int extra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,0);
if(extra==WifiManager.WIFI_STATE_ENABLED)
{
}//...else WIFI_STATE_DISABLED, WIFI_STATE_DISABLING, WIFI_STATE_ENABLING
break;
}
}
};