2012-01-10 67 views
28

我試圖找到如果scanResult是當前連接的wifi網絡。如何在android中獲得當前的wifi連接信息

這裏是我的代碼

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爲空。

我錯在哪裏或者有沒有其他方法可以做到這一點?

回答

50

很可能你已經找到了答案:currentWifi.getSSID()被引用在大多數情況下,其中scanResult.SSID不是(當然,你不能在字符串上使用== :))。

嘗試這樣的事情,它返回當前SSIDnull:需要

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 2015-08-26 08:45:22

+0

'getNetworkInfo'已棄用,請將'getActiveNetworkInfo'與'networkInfo.getType()== ConnectivityManager.TYPE_WIFI' – zed 2017-09-27 09:26:46

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; 
} 
相關問題