如何在Android中获取当前的WiFi连接信息

36
我正在尝试找出scanResult是否是当前连接的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;
}

我获取扫描结果没有问题。
我总是得到当前的Wifi为空。
我在哪里做错了,或者有其他方法可以做到这一点吗?
3个回答

62

很有可能您已经找到答案了:在大多数情况下,引用 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 代替。代码如下:

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

4
截至目前,connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);已经正式被弃用了。很遗憾。 - guness
1
getNetworkInfo is deprecated, use getActiveNetworkInfo with networkInfo.getType() == ConnectivityManager.TYPE_WIFI - zed
2
请注意,使用最新的Android版本,您还需要某种类型的位置权限才能实际获取SSID。 - nsndvd

19

我曾经使用的未过时的修改方法来处理当前答案

https://developer.android.com/reference/android/net/ConnectivityManager#getActiveNetworkInfo()


(注:此链接为Android开发者网站上有关获取网络连接信息的API文档)
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;
}

1
最好使用 TextUtils.isEmpty() 而不是 StringUtil.isBlank() - Onkar Nene
有什么特别的原因吗? - Evan Parsons
当我运行这段代码时,它只返回 02:00:00:00:00:00,就是这样! :| - Ninja
现在它已经被弃用了。(自API 29起被弃用) - Abdulrahman Hasanato
现在它已经被弃用了。(自API 29起被弃用) - undefined

6

更新 Android Oreo。 否则,如果未在清单中添加ACCESS_FINE_LOCATION权限,则会返回未知SSID。

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


 fun getCurrentSsid(context: Context): String {
            var ssid = "NA"
            val connManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
            if (networkInfo.isConnected) {
                val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
                val connectionInfo = wifiManager.connectionInfo
                if (connectionInfo != null && !connectionInfo.ssid.isEmpty()) {
                    ssid = connectionInfo.ssid
                }
            }
            return ssid
        }

1
当我运行这段代码时,它只返回 02:00:00:00:00:00,就是这样! :| - Ninja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接