获取所有WiFi接入点的BSSID的方法是什么?

13

我需要获取所有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为null。我想连接到用户定义的SSID信号最强的接入点。是否有可用的API方法来获取用户定义SSID的信号最强的AP。(在我的情况下,有许多SSID只有一个带有多个AP的单个SSID可用。)

3个回答

12

根据@ToonSuperLove的回答进行了修改,主要是为了避免NPE(NullPointerException)。

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
@x0a 我猜这是 NullPointerException - renyuneyun

7

在配置中,这只是设置部分(例如,像询问用户/密码/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();
}

1
我使用了这个精美的代码片段,并混合了来自Marakana(非常感谢,marko!)的一些代码,以从设备上存储的连接和WiFi网络信息中提取所有内容。 :) 已点赞!https://dev59.com/23A65IYBdhLWcg3w-z1A#15976165 - tony gil

1
使用WiFiInfo类获取当前连接的WIFI网络的BSSID。
            WifiManager wifiMan = (WifiManager) context.getSystemService(
                            Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiMan.getConnectionInfo();

            String macAddr = wifiInfo.getMacAddress();
            String bssid = wifiInfo.getBSSID();

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