2012-01-10 4 views
28

Я пытаюсь найти, если scanResult является текущей подключенной Wi-Fi-сетью.Как получить текущую информацию о подключении Wi-Fi в android

вот мой код

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; 
} 

У меня нет никаких проблем на получение scanresult.

Всегда я получаю currentWifi null.

Где я ошибаюсь или есть альтернативный метод для этого?

ответ

50

Скорее всего, вы уже нашли ответ: currentWifi.getSSID() указан в большинстве случаев, где scanResult.SSID нет (и, конечно же, вы не должны использоватьна строках :)).

Попробуйте что-то вроде этого, он возвращает текущий SSID или null:

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; 
} 

также требуются разрешения:

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

StringUtil не стандартный Android класс, так что вы можете использовать TextUtils вместо этого. Код будет выглядеть следующим образом:

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

как сейчас 'connManager.getNetworkInfo (ConnectivityManager.TYPE_WIFI);' официально осуждается. так грустно. – guness

+0

'getNetworkInfo' устарел, используйте' getActiveNetworkInfo' с 'networkInfo.getType() == ConnectivityManager.TYPE_WIFI' – zed

11

Мой, не осуждается, изменен подход к текущему ответу

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; 
}