2012-09-17 11 views
13

Ho bisogno di ottenere BSSID (MAC) di tutti gli AP. Si prega di trovare sotto il blocco di codice.Come ottenere BSSID di tutti i punti di accesso 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);  
    } 

Ma sopra il blocco di codice restituisce SSID correttamente ma null per BSSID. Voglio connettermi al punto di accesso più forte con SSID definito dall'utente. È disponibile un metodo API per ottenere il migliore AP del segnale con SSID definito dall'utente. (Nel mio caso ci sono molti SSID con SSID singolo con più AP disponibili).

risposta

5

Nella configurazione è solo la parte di impostazione (ad esempio, come il finestra di dialogo che chiede user/pass/WPA o NULL bla bla)

per ottenere BSSID da AP, è necessario ottenere da 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

adattato questo eccellente frammento e mescolato con un po 'di codice da Marakana (grazie mille, marko!) Per estrarre tutto dalla connessione e dall'archivio informazioni di rete wifi sul dispositivo. :) UPVOTED! http://stackoverflow.com/a/15976165/1166727 –

11

Adattato la risposta @ToonSuperLove, soprattutto per evitare 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(); 
    } 
} 
+0

Che cos'è NPE? \t \t \t \t – x0a

+0

@ x0a Immagino che sia 'NullPointerException' – renyuneyun

1

Per ottenere BSSID per la rete WIFI attualmente connessa, utilizzare la classe WiFiInfo.

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

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