Obtenir SSID lorsque le WIFI est connecté
j'essaie d'obtenir le SSID du réseau WIFI lorsque mon appareil android est connecté au WIFI.
j'ai enregistré un diffuseur écoutant android.net.wifi.supplicant.CONNECTION_CHANGE
. Je reçois la notification quand le WIFI est déconnecté ou reconnecté. Malheureusement, je ne peux pas avoir 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 du SSID, j'ai la chaîne <unknown ssid>
en arrière.
ce sont les permissions dans le manifeste (J'ai ajouté ACCESS_NETWORK_STATE juste pour vérifier, Je n'en ai pas réellement 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 arrive-t-il? Comment puis-je avoir le vrai SSID? L'émission est-elle lancée trop tôt, avant que la connexion ne soit établie? Est-il une autre émission que je devrais écouter? Je ne m'intéresse qu'aux connexions WIFI, pas aux connexions 3G.
mise à jour: je viens de vérifier, wifiInfo.getBSSID()
renvoie null.
6 réponses
j'écoute WifiManager.NETWORK_STATE_CHANGED_ACTION in a broadcast receiver
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {
NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
je cherche netInfo.isConnected (). Alors je peux utiliser
WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo ();
String ssid = info.getSSID();
mise à JOUR
à partir de android 8.0, nous n'obtiendrons pas de SSID du réseau connecté à moins que le GPS ne soit activé.
à partir de Android 8.1 (API 27), les applications doivent obtenir la permission ACCESS_COARSE_LOCATION
(ou ACCESS_FINE_LOCATION
) afin d'obtenir les résultats de WifiInfo.getSSID()
ou WifiInfo.getBSSID()
.
cette permission est également nécessaire pour obtenir les résultats de WifiManager.getConnectionInfo()
et WifiManager.getScanResults()
bien qu'il ne soit pas clair si c'est nouveau dans 8.1 ou était exigé auparavant.
Source : "BSSID/SSID peut être utilisée pour déduire l'emplacement, l'exigent les même autorisations de localisation pour accéder à ces champs WifiInfo demandé en utilisant WifiManager.getConnectionInfo () comme pour WifiManager.getScanResults ()."
Si vous ne voulez pas faire de Récepteur de Radiodiffusion alors simple essayer
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo;
wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
ssid = wifiInfo.getSSID();
}
N'oubliez pas que chaque fois que l'utilisateur se déconnecte ou se connecte à un nouveau SSID ou à un changement d'état wifi, vous devez initialiser WifiInfo I. e wifiInfo = wifiManager.getConnectionInfo();
dans Android 8.1, il est nécessaire d'activer la localisation pour obtenir SSID, sinon vous pouvez obtenir l'état de connexion mais pas SSID
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = null;
if (wifiManager != null)
wifiInfo = wifiManager.getConnectionInfo();
String ssid = null;
if (wifiInfo != null)
ssid = wifiInfo.getSSID(); /*you will get SSID <unknown ssid> if location turned off*/
suite à la réponse de @EricWoodruff.
vous pouvez utiliser netInfo
's getExtraInfo()
pour obtenir wifi SSID.
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {
NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
String ssid = info.getExtraInfo()
Log.d(TAG, "WiFi SSID: " + ssid)
}
}
si vous n'utilisez pas BroadcastReceiver cochez cette réponse pour obtenir SSID en utilisant Context
ceci est testé sur Android Oreo 8.1.0
Vérifiez via NetworkInfo si elle est connectée. Puis utilisez wifiinfo getSSid (). Vous pourriez vouloir supprimer double slashes de returnnd SSID
https://play.google.com/store/apps/details?id=com.connect.freewifi
vous devriez consulter cette application et l'api de développeur de http://developer.android.com/reference/android/net/wifi/WifiInfo.html
It va vous aider dans votre tâche.