2012-09-17 18 views
13

Necesito obtener BSSID (MAC) de todos los AP. Por favor encuentre el bloque de código a continuación.¿Cómo obtener el BSSID de todos los puntos de acceso 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);  
    } 

Pero el bloque de código anterior devuelve el SSID correctamente pero nulo para el BSSID. Quiero conectarme al punto de acceso más fuerte con el SSID definido por el usuario. ¿Hay algún método API disponible para obtener el mejor AP de fuerza de señal con SSID definido por el usuario (en mi caso hay muchos SSID con SSID único con múltiples AP disponibles)

Respuesta

5

En la configuración solo la parte de ajuste (por ejemplo, diálogo que pregunta al usuario/pass/WPA o bla bla NULL)

para obtener BSSID del AP, lo que necesita para obtener de 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

adaptaron este fragmento excelente y lo mezclaron con un código de Marakana (grazie mille, marko!) Para extraer todo de la conexión y de la tienda de información de red wifi en el dispositivo. :) ¡ACTUALIZADO! http://stackoverflow.com/a/15976165/1166727 –

11

Adaptado por la respuesta @ToonSuperLove, principalmente para evitar los 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

¿Qué es NPE? \t \t \t \t – x0a

+0

@ x0a Supongo que es 'NullPointerException' – renyuneyun

1

Para obtener un BSSID para la red WIFI actualmente conectada, use la clase WiFiInfo.

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

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