Obtenir SSID lorsque le WIFI est connecté
Je vais essayer d'obtenir le SSID du réseau WIFI quand mon appareil android est connecté au WIFI.
J'ai enregistré un BroadcastReceiver écoute pour android.net.wifi.supplicant.CONNECTION_CHANGE
. Je reçois la notification lorsque le WIFI est déconnecté ou reconnecté. Malheureusement, je ne peux pas obtenir le SSID du réseau.
J'utilise le code suivant pour trouver le SSID:
WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();
Au lieu de le SSID, je reçois la chaîne <inconnu ssid>
dos.
Ce sont les autorisations dans le manifeste (j'ai ajouté ACCESS_NETWORK_STATE juste pour vérifier, je n'ai pas vraiment besoin)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Pourquoi cela se produit? Comment puis-je obtenir le SSID? Est la diffusion tiré au début, avant que la connexion est établie? Est-il une autre émission que je devrais écouter? Je suis seulement intéressé dans les connexions WIFI, pas de 3G.
Mise à jour: je viens de vérifier, wifiInfo.getBSSID()
renvoie la valeur null.
- Intéressant, les docs de l'état, vous devriez recevoir
null
degetSSID()
si la connexion n'est pas disponible, donc je ne pense pas que c'est un problème de connexion. Je me demandais, qu'est-ce que le SSID du réseau auquel vous faites des tests sur? - Qu'est-ce que l'état détaillé et suplicant état?
- S, consulter le lien que j'ai fourni dans la question, <inconnu ssid> est Android 4.2 comportement et éventuellement des versions plus récentes ainsi. C'est un Android bug.
- Merci pour la clarification.
- Essayez cette SORTE de réponse. stackoverflow.com/questions/49977395/...
Vous devez vous connecter pour publier un commentaire.
J'écoute pour WifiManager.NETWORK_STATE_CHANGED_ACTION dans un récepteur de radiodiffusion
- Je vérifier pour netInfo.isConnected (). Ensuite, je suis en mesure d'utiliser
Mise à JOUR
À partir d'android 8.0, on ne sera pas obtenir le SSID du réseau, sauf si le GPS est allumé.
WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);
àWifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
Parce que WiFiManager devez utiliser Contexte de l'Application (pas de Contexte d'Activité), sinon une fuite de mémoire peut se produire.De départ avec Android 8.1 API (27), les applications doivent être accordées à la
ACCESS_COARSE_LOCATION
(ouACCESS_FINE_LOCATION
) une autorisation afin d'obtenir des résultats deWifiInfo.getSSID()
ouWifiInfo.getBSSID()
.Cette autorisation est également nécessaire pour obtenir des résultats de
WifiManager.getConnectionInfo()
etWifiManager.getScanResults()
bien qu'il n'est pas clair si cela est nouveau dans 8.1 ou auparavant.Source: "BSSID/SSID peut être utilisée pour déduire l'emplacement, l'exigent les mêmes
emplacement des autorisations pour l'accès à ces champs WifiInfo
demandé l'aide de WifiManager.getConnectionInfo() comme pour
WifiManager.getScanResults()."
Si vous ne voulez pas faire de Récepteur de Radiodiffusion alors simple essayez
Rappelez-vous chaque fois que l'utilisateur de connecter ou déconnecter à nouveau SSID ou tout wifi, changement d'état, alors vous devez initialiser WifiInfo je.e
wifiInfo = wifiManager.getConnectionInfo();
Je l'ai trouvé intéressant solution pour obtenir un SSID de actuellement connecté Wifi AP.
Vous avez simplement besoin d'utiliser itérer
WifiManager.getConfiguredNetworks()
et trouver la configuration spécifiqueWifiInfo.getNetworkId()
Mon exemple
en récepteur de Radiodiffusion de l'action
WifiManager.NETWORK_STATE_CHANGED_ACTION
Je suis en cours état de connexion de l'intention
Si
NetworkInfo.getState
est égal àNetworkInfo.State.CONNECTED
puis je m'en courant WifiInfo objetEt après que
Et chose très importante cette méthode ne nécessite pas de Lieu, ni de l'Emplacement
Permisions
Dans Android 8.1 il est doit se tourna Emplacement pour obtenir le SSID, si ce n'est vous pouvez obtenir de l'état de la connexion mais pas SSID
C'est un suivi de la réponse donnée par @EricWoodruff.
Vous pouvez utiliser
netInfo
'sgetExtraInfo()
pour obtenir wifi SSID.Si vous n'êtes pas à l'aide de BroadcastReceiver vérifier cette réponse pour obtenir SSID à l'aide
Context
C'est testé sur Android Oreo 8.1.0
Vérifier via NetworkInfo pour wifi de type si il est connecté.
Et puis utiliser wifiinfo getSSid(). Vous pouvez supprimer doubles barres obliques de returnd SSID
https://play.google.com/store/apps/details?id=com.connect.freewifi
Vous devriez vérifier cette application et développeur de l'api de
http://developer.android.com/reference/android/net/wifi/WifiInfo.html
Il va vous aider dans votre tâche.
Android 9 SSID montrant les valeurs NULL usage de ce code..