J'ai besoin de détecter quand j'ai une connectivité réseau via WIFI. Quelle diffusion est envoyée pour établir qu'une connexion réseau valide a été établie. Je dois valider qu'une connexion réseau valide pour HTTP existe. Que dois-je écouter et quels tests supplémentaires dois-je faire pour savoir qu'une connexion valide existe.
android
android-wifi
Androider
la source
la source
Réponses:
Vous pouvez enregistrer un
BroadcastReceiver
pour être averti lorsqu'une connexion WiFi est établie (ou si la connexion a changé).Enregistrez le
BroadcastReceiver
:Et puis dans votre
BroadcastReceiver
faire quelque chose comme ceci:Pour plus d'informations, consultez la documentation sur
BroadcastReceiver
etWifiManager
Bien sûr, vous devez vérifier si l'appareil est déjà connecté au WiFi avant cela.
EDIT: Grâce à ban-geoengineering, voici une méthode pour vérifier si l'appareil est déjà connecté:
la source
private boolean isConnectedViaWifi() { ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); }
Le meilleur qui a fonctionné pour moi:
AndroidManifest
Classe BroadcastReceiver
Autorisations
la source
Pour moi ne
WifiManager.NETWORK_STATE_CHANGED_ACTION
fonctionne que.Enregistrer un récepteur de diffusion:
et recevez:
la source
Les réponses données par l'utilisateur @JPM et @usman sont vraiment très utiles. Cela fonctionne bien mais dans mon cas, cela arrive
onReceive
plusieurs fois dans mon cas 4 fois, donc mon code s'exécute plusieurs fois.Je fais quelques modifications et fais selon mes besoins et maintenant cela ne vient qu'une fois
Voici la classe java pour Broadcast.
Dans AndroidManifest
la source
Vous pouvez démarrer une connexion wifi si vous donnez à l'utilisateur le choix de remplacer le comportement normal consistant à demander à chaque fois.
J'ai choisi d'utiliser trois méthodes ...
Il s'agit de vérifier rapidement s'il existe une connexion Internet Wifi ou CellData. De là, vous pouvez choisir l'action que vous souhaitez entreprendre. Est-il en mode avion doit également être vérifié.
Sur un fil séparé. J'ai mis une variable IpAddress à = "" Et interroger jusqu'à ce que j'aie une adresse IP valide.
Un autre extrait de code ... S'il n'est pas activé, activez-le (avec l'autorisation préalable des utilisateurs)
la source
Pour détecter l'état de la connexion WIFI, j'ai utilisé CONNECTIVITY_ACTION de la classe ConnectivityManager afin:
et depuis votre BroadCastReceiver:
ps: fonctionne bien pour moi :)
la source
Ce code ne nécessite aucune autorisation. Il est limité uniquement aux changements d'état de la connectivité du réseau Wi-Fi (aucun autre réseau n'est pris en compte). Le récepteur est statiquement publié dans le fichier AndroidManifest.xml et n'a pas besoin d'être exporté comme il sera invoqué par le système
protected broadcast
,NETWORK_STATE_CHANGED_ACTION
à chaque connectivité réseau changement d'état.AndroidManifest:
Classe BroadcastReceiver:
Autorisations:
la source
Voici un exemple de mon code, qui prend en compte la préférence des utilisateurs de n'autoriser les communications que lorsqu'ils sont connectés au Wifi.
J'appelle ce code de l'intérieur
IntentService
avant d'essayer de télécharger des trucs.Notez que ce
NetworkInfo
sera lenull
cas s'il n'y a pas de connexion réseau d'aucune sorte.la source
Android O a supprimé la possibilité de recevoir les diffusions implicites pour un changement d'état du wifi. Donc, si votre application est fermée, vous ne pourrez pas les recevoir. Le nouveau
WorkManager
a la capacité de s'exécuter lorsque votre application est fermée, j'ai donc expérimenté un peu avec elle et cela semble fonctionner assez bien:Ajoutez ceci à vos dépendances:
WifiConnectWorker.kt
MainActivity.kt
Gardez à l'esprit qu'il ne s'agissait que d'un test rapide pour une notification unique. Il y a plus de travail à faire pour toujours être averti lorsque le WiFi est activé et désactivé.
PS: Lorsque l'application est forcée à quitter , le worker n'est pas démarré, il semble alors
WorkManager
annuler les demandes.la source
J'ai utilisé ce code:
la source
J'ai deux méthodes pour détecter la connexion WIFI recevant le contexte de l'application:
1) mon ancienne méthode
2) ma nouvelle méthode (j'utilise actuellement cette méthode):
la source
Pour tous ceux qui apprécient la diffusion CONNECTIVITY_CHANGE , veuillez noter que celle-ci n'est plus déclenchée lorsque l'application est en arrière-plan dans Android O.
https://developer.android.com/about/versions/o/background.html
la source
1) J'ai également essayé l'approche Broadcast Receiver même si je sais que CONNECTIVITY_ACTION / CONNECTIVITY_CHANGE est obsolète dans l'API 28 et n'est pas recommandé. Également lié à l'utilisation d'un registre explicite, il écoute tant que l'application est en cours d'exécution.
2) J'ai également essayé Firebase Dispatcher qui fonctionne mais pas au-delà de l'application tuée.
3) La méthode recommandée est WorkManager pour garantir l'exécution au-delà du processus tué et en interne en utilisant registerNetworkRequest ()
La plus grande preuve en faveur de l'approche n ° 3 est référencée par Android doc lui-même. Surtout pour les applications en arrière-plan.
Ici aussi
Jusqu'à présent, cela fonctionne bien pour nous en utilisant la requête Periodic WorkManager.
Mise à jour: J'ai fini par écrire 2 articles médiatiques à ce sujet.
la source