我需要获得所有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具有单个SSID且具有多个AP可用。)

#1楼 票数:12

改编@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();
    }
}

#2楼 票数:5

在配置中它只是设置部分(例如,像询问用户/ pass / WPA或NULL blah blah的对话框一样)

要从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();
}

#3楼 票数:1

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

            WifiManager wifiMan = (WifiManager) context.getSystemService(
                            Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiMan.getConnectionInfo();

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

  ask by Balaji Khadake translate from so

未解决问题?本站智能推荐:

1回复

在android中以编程方式连接wpa2企业wifi连接

我只是尝试了几个代码用于android中的wpa2企业连接,但没有任何连接,我想要一个正确的代码来连接正确的网络。 现在我已经使用了这个答案,但我需要澄清一点,因为这个答案非常古老。 这里我附上一些关于连接澄清的截图。 在这 你可以看到身份和密码 我在wificonfigura
1回复

Android-如何以编程方式打开wifi并等待直到未启用

我想使用wifi通过本地网络发送数据。 在发送数据之前,我检查wifi状态,如果未启用,请询问用户并打开wifi。 问题是,如果我打开wifi并尝试立即使用它,则出现错误,原因是wifi需要一些时间才能打开。 因此,我认为,我需要打开wifi并设置处理程序,当wifi进入启用状态时,该
1回复

Wi-Fi Direct组所有者频段

我目前正在使用Nexus 10(2.4 GHz和5 GHz双频无线电)通过Wi-Fi Direct连接到第三方外围设备(2.4GHz单频无线电)。 当我将平板电脑作为客户端连接而将外围设备作为组所有者(GO)连接时,则连接没有问题,因为GO确定了要使用的频带(即2.4 GHz),这两个设备都支
1回复

支持WiFi的设备可以识别WiFi接入点吗?

支持WiFi的设备如何识别编程语言中的WiFi接入点?
1回复

以相同的ssid和不同的bssid以编程方式切换wifi

我有2个具有相同“ SSID”和不同bssid的WiFi,并且都是开放网络。 我创建了一个程序,该程序将尝试通过设置不同的bssid断开与第一个WiFi的连接并连接到第二个WiFi。 它在htc和摩托罗拉手机中效果很好,但在三星手机中根本不起作用。 对于htc和Motorola,即使Wi
1回复

如何从Android WifiConfiguration条目获得WiFi安全性(NONE,WEP,WPA,WPA2)?

我需要从WifiConfiguration条目获取安全类型。 可能吗? 返回值"NONE", "WEP", "WPA", "WPA2" 对于那些认为这是一个重复问题的人:我想从WiFiConfiguration对象而不是ScanResult对象获取信息。 这是不一样的!
1回复

通过root自动接受wifi直接连接

在Android SDK中,提供了Wireless P2P(WiFi Direct)API。 我正在开发一个应用程序,该应用程序要求该应用程序即时连接到具有相同应用程序的其他设备,并在它们之间共享信息(文本数据)。 为此,我要求设备之间可以自动连接。 我想知道如果您在设备上拥有root
1回复

Android中的接入点属性

我正在开发一个需要根据其属性连接到多个Wi-Fi接入点的应用。 一个示例是选择更好的接入点以改善连接性。 在新环境中,可能无法预先知道接入点的详细信息。 如何使用Android手机以编程方式找到接入点的属性(特别是名称和制造/制造,信号强度)? 我可以知道接入点的制造商/制造商(以便可以