如何使用Android API从安卓设备中获取WiFi网络的名称?

62

我认为我应该使用NetworkInterface::getDisplayName。我得到了一些名称,但是这个名称与我选择要连接的网络时看到的名称不同。

我认为我应该使用 NetworkInterface::getDisplayName 方法来获取网络接口的显示名称,但是实际上获得的名称与我在选择要连接的网络时看到的名称并不相同。

2
有人知道需要哪些权限才能做到这一点吗? - Paul Alexander
8
Android 权限:ACCESS_WIFI_STATE该权限允许应用程序访问设备的 WiFi 连接状态信息,包括当前连接的 SSID 和 BSSID。 - PHP Avenger
4个回答

46

android.net.wifi.WifiInfo.getSSID是什么?


WifiManager wifiMgr = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
String name = wifiInfo.getSSID();

对于 Xamarin C#: Android.Net.Wifi.WifiInfo.SSID - Matheus Miranda
我已经将提问者的答案添加到了你的答案中。希望这样可以,@Loxley。 - Sabito stands with Ukraine
WifiManager在Xamarin中未知,我需要添加一些包吗?还有,什么是“context”? - GuidoG

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

什么是 WifiManager?我该如何让 Xamarin 知道它? - GuidoG

19

这个方法(混合使用Marakana和其他人的各种答案)可以同时从以下内容中提取您想要的一切:

  1. 所有在范围内的WiFi路由器
  2. 连接的WiFi路由器
  3. 所有已存储的WiFi网络(在您的设备上)

public 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 && !(connectionInfo.getSSID().equals(""))) {
        //if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) {
      ssid = connectionInfo.getSSID();
    }
 // Get WiFi status MARAKANA
    WifiInfo info = wifiManager.getConnectionInfo();
    String textStatus = "";
    textStatus += "\n\nWiFi Status: " + info.toString();
    String BSSID = info.getBSSID();
    String MAC = info.getMacAddress();

    List<ScanResult> results = wifiManager.getScanResults();
    ScanResult bestSignal = null;
    int count = 1;
    String etWifiList = "";
    for (ScanResult result : results) {
        etWifiList += count++ + ". " + result.SSID + " : " + result.level + "\n" +
                result.BSSID + "\n" + result.capabilities +"\n" +
                "\n=======================\n";
    }
    Log.v(TAG, "from SO: \n"+etWifiList);

    // List stored networks
    List<WifiConfiguration> configs = wifiManager.getConfiguredNetworks();
    for (WifiConfiguration config : configs) {
        textStatus+= "\n\n" + config.toString();
    }
    Log.v(TAG,"from marakana: \n"+textStatus);
  }
  return ssid;
}

免责声明:虽然这是可以运行的代码而非伪代码,但它的唯一目的是说明从Wi-Fi连接中提取数据的方法,使用前应进行适当的调整(和清理)。


@Mr_and_Mrs_D 1. Marakana是Marko Gargenta,许多示例项目的作者。2.正如我所说,这是一个混搭,包括您所提到的示例代码。 :) - tony gil
在检测到所有 Wi-Fi 后,如何连接到该 Wi-Fi。 - Denny Sharma
请将这个问题单独提出来,@DennySharma。 :) - tony gil
6
别忘了权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> - Shereef Marzouk

0

只需2行即可简单实现

WifiManager w=(WifiManager)getSystemService(Context.WIFI_SERVICE);
String wifi=w.getConnectionInfo().getSSID();

记得将这个放在你的清单文件中

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

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