2012-09-17 40 views
13

Tôi cần nhận BSSID (MAC) của tất cả các AP. Vui lòng tìm mã bên dưới.Cách nhận BSSID của tất cả các điểm truy cập wifi?

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

Nhưng khối mã ở trên trả về SSID đúng nhưng null cho BSSID. Tôi muốn kết nối với điểm truy cập mạnh nhất với SSID do người dùng xác định. Có phương pháp API nào có sẵn để nhận AP tốt nhất của tín hiệu tốt nhất với SSID do người dùng xác định hay không. (Trong trường hợp của tôi có nhiều SSID với SSID đơn có sẵn nhiều AP.)

Trả lời

5

Trong cấu hình nó chỉ là phần thiết lập (ví dụ như hộp thoại hỏi user/pass/WPA hoặc blah blah NULL)

để có được BSSID từ AP, bạn cần phải nhận được nó từ 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

chuyển thể đoạn tuyệt vời này và trộn nó với một số mã từ Marakana (grazie mille, marko!) Để trích xuất tất cả mọi thứ từ kết nối và mạng wifi cửa hàng thông tin về thiết bị. :) CẬP NHẬT! http://stackoverflow.com/a/15976165/1166727 –

11

Phỏng theo câu trả lời của @ToonSuperLove, chủ yếu là để tránh NPEs.

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(); 
    } 
} 
+0

NPE là gì? \t \t \t \t – x0a

+0

@ x0a Tôi đoán đó là 'NullPointerException' – renyuneyun

1

Để nhận BSSID cho mạng WIFI hiện đang kết nối, hãy sử dụng lớp WiFiInfo.

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

      String macAddr = wifiInfo.getMacAddress(); 
      String bssid = wifiInfo.getBSSID(); 
Các vấn đề liên quan