【问题标题】:How to get BSSID of all wifi access points?如何获取所有wifi接入点的BSSID?
【发布时间】:2012-09-09 17:44:37
【问题描述】:

我需要获取所有 AP 的 BSSID(MAC)。请在下面找到代码块。

    List<WifiConfiguration> test =  wifiManager.getConfiguredNetworks();
    for(int k=0;k<test.size();k++){ 
        Log.d("acheck", "test BSSID = "+test.get(k).BSSID);         
        Log.d("acheck", "test BSSID = "+test.get(k).BSSID);    
   }

但上述代码块正确返回 SSID,但 BSSID 为空。我想使用用户定义的 SSID 连接到最强的接入点。是否有任何 API 方法可用于获得具有用户定义的 SSID 的最佳信号强度的 AP。(在我的情况下,有许多具有单个 SSID 的 SSID 和多个可用的 AP。)

【问题讨论】:

    标签: android android-wifi wifi


    【解决方案1】:

    要获取当前连接的 WIFI 网络的 BSSID,请使用 WiFiInfo 类。

                WifiManager wifiMan = (WifiManager) context.getSystemService(
                                Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiMan.getConnectionInfo();
    
                String macAddr = wifiInfo.getMacAddress();
                String bssid = wifiInfo.getBSSID();
    

    【讨论】:

      【解决方案2】:

      改编 @ToonSuperLove 的答案,主要是为了避免 NPE。

      public class WifiTest extends Activity {
      
          public void loadWifiAvailableList(EditText etWifiList) {
              WifiManager wifiManager = (WifiManager) 
                                          getSystemService(Context.WIFI_SERVICE);
              List<ScanResult> results = wifiManager.getScanResults();
              String message = "No results. Check wireless is on";
              if (results != null) {
                  final int size = results.size();
                  if (size == 0) message = "No access points in range";
                  else {
                      ScanResult bestSignal = results.get(0);
                      etWifiList.setText(""); // etWifiList is EditText
                      int count = 1;
                      for (ScanResult result : results) {
                          etWifiList.append(count++ + ". " + result.SSID + " : "
                                  + result.level + "\n" + result.BSSID + "\n"
                                  + result.capabilities + "\n"
                                  + "\n=======================\n");
                          if (WifiManager.compareSignalLevel(bestSignal.level,
                                  result.level) < 0) {
                              bestSignal = result;
                          }
                      }
                      message = String.format(
                              "%s networks found. %s is the strongest.", size,
                              bestSignal.SSID + " : " + bestSignal.level);
                  }
              }
              Toast.makeText(this, message, Toast.LENGTH_LONG).show();
          }
      }
      

      【讨论】:

      • 什么是 NPE?​ ​ ​
      • @x0a 我猜是NullPointerException
      【解决方案3】:

      在配置中,它只是设置部分(例如,询问用户/密码/WPA 或 NULL 等等的对话框)

      要从AP获取BSSID,需要从ScanResult获取

      public void loadWifiAvailableList() {
          List<ScanResult> results = wifiManager.getScanResults();
          ScanResult bestSignal = null;
          etWifiList.setText(""); // etWifiList is EditText
          int count = 1;
          for (ScanResult result : results) {
              etWifiList.append(count++ + ". " + result.SSID + " : " + result.level + "\n" +
                      result.BSSID + "\n" + result.capabilities + "\n" +
                      "\n=======================\n");
      
            if (bestSignal == null || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0) 
            {
              bestSignal = result;
            }
          }
      
      
          String message = String.format("%s networks found. %s is the strongest.",
              results.size(), bestSignal.SSID + " : " + bestSignal.level);
          Toast.makeText(this, message, Toast.LENGTH_LONG).show();
      }
      

      【讨论】:

      • 改编了这个出色的 sn-p 并将其与 Marakana 的一些代码(grazie mille,marko!)混合,以从设备上的连接和 wifi 网络信息存储中提取所有内容。 :) 赞成! stackoverflow.com/a/15976165/1166727
      猜你喜欢
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      相关资源
      最近更新 更多