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.

36
demandé sur zmbq 2014-01-28 00:51:15

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é.

63
répondu Eric Woodruff 2018-06-28 09:59:52

à 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 ()."

30
répondu mike47 2017-12-16 17:01:48

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();

25
répondu Pranav 2016-09-07 13:27:46

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*/
2
répondu user3143487 2018-06-03 09:22:54

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

2
répondu Yaswant Narayan 2018-07-25 12:49:57

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.

0
répondu Adam Geller 2014-08-16 08:43:02