2012-01-10 16 views
28

Estoy tratando de encontrar si scanResult es la red wifi conectada actual.cómo obtener la información de conexión wifi actual en android

aquí es mi código

public boolean IsCurrentConnectedWifi(ScanResult scanResult) 
{ 
    WifiManager mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiInfo currentWifi = mainWifi.getConnectionInfo(); 
    if(currentWifi != null) 
    { 
     if(currentWifi.getSSID() != null) 
     { 
      if(currentWifi.getSSID() == scanResult.SSID) 
      return true; 
     } 
    } 
    return false; 
} 

no tengo ningún problema en conseguir scanresult.

Siempre me estoy poniendo al díaWifi es nulo.

¿Dónde estoy equivocado o hay algún método alternativo para hacer esto?

Respuesta

50

Probablemente ya ha encontrado la respuesta: currentWifi.getSSID() se cita en la mayoría de los casos donde scanResult.SSID no es (y por supuesto no debe usar == en cadenas :)).

intentar algo como esto, devuelve actual SSID o null: Es necesario

public static String getCurrentSsid(Context context) { 
    String ssid = null; 
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (networkInfo.isConnected()) { 
    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
    if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) { 
     ssid = connectionInfo.getSSID(); 
    } 
    } 
    return ssid; 
} 

también permisos:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

StringUtil no es una clase estándar de Android, por lo que puede utilizar TextUtils lugar. Después, el código es el siguiente:

public static String getCurrentSsid(Context context) { 
    String ssid = null; 
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (networkInfo.isConnected()) { 
    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
    if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) { 
     ssid = connectionInfo.getSSID(); 
    } 
    } 
    return ssid; 
} 
+2

a partir de ahora 'connManager.getNetworkInfo (ConnectivityManager.TYPE_WIFI);' oficialmente está en desuso. muy triste. – guness

+0

'getNetworkInfo' está en desuso, use' getActiveNetworkInfo' con 'networkInfo.getType() == ConnectivityManager.TYPE_WIFI' – zed

11

Mi enfoque no modificado desaprobado a la respuesta actual

public static String getCurrentSsid(Context context) { 
     String ssid = null; 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     if (networkInfo == null) { 
      return null; 
     } 

     if (networkInfo.isConnected()) { 
      final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
      final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
      if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) { 
       ssid = connectionInfo.getSSID(); 
      } 
     } 

    return ssid; 
} 
Cuestiones relacionadas