Android 如何获取已连接的Wifi名称?

Android 如何获取已连接的Wifi名称?,android,Android,我使用了下面的代码获取android中的Wifi名称。以下是我使用的代码: WifiManager wifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info; if (wifiManager != null && isWebViewLoaded) { info

我使用了下面的代码获取android中的Wifi名称。以下是我使用的代码:

WifiManager wifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
       WifiInfo info;
       if (wifiManager != null && isWebViewLoaded) {
           info = wifiManager.getConnectionInfo();
           String wifiName = info.getSSID();
}

该代码适用于其他设备(低于版本8),但我在Nexus 5X(Oreo v-8.1)上尝试过,它根据info.getSSID()给出了“未知SSID”。

试试这段代码,原始答案


你可以尝试这样的方法,我不认为这是一个真正的重复,也不认为上面链接和下面回答的其他解决方案解决了这个问题。这似乎是安卓8或8.1的问题。我的Pixel 2运行8.1,给了我很大的帮助。然而,只有当我针对API26,API25或更低版本时,这种情况才会发生。好吧,我找到了这个。在安卓8.1(可能也是8.0?)中,如果您的目标是API 26+getSSID(),则除非您的应用程序具有以下权限,否则将始终返回:访问\u粗略\u位置。此行为记录了一个错误:。我无法为这个问题添加答案,因为它被错误地标记为重复。显然不是。谢谢。但我不认为这是一只虫子。蓝牙扫描也是如此。这是一种可怕的方式,会让用户感到困惑,但正如@Glaucus所说的那样,这意味着额外的安全性,从Android 8,您必须通过
ActivityCompat.requestPermissions
明确请求这些位置权限,这在API<26上有效。这个问题是关于API>=26的。
public String getWifiName(Context context) {
   WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    if (manager.isWifiEnabled()) {
       WifiInfo wifiInfo = manager.getConnectionInfo();
       if (wifiInfo != null) {
          DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
          if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) {
              return wifiInfo.getSSID();
          }
       }
    }
    return null;
}