1

Estoy usando el siguiente código pero no me muestra el BSSID en la lista de las redes Wifi,

public class MainActivity extends AppCompatActivity {
ListView lv;
WifiManager wifi;
String wifis[];
WifiScanReceiver wifiReciever;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lv=(ListView) findViewById(R.id.listview);
    wifi=(WifiManager) getSystemService(Context.WIFI_SERVICE);
    wifiReciever = new WifiScanReceiver();
    wifi.startScan();

    Button btn=(Button) findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            wifi.startScan();
            Toast notificacion=Toast.makeText(MainActivity.this,"Actualizacion de parametros",Toast.LENGTH_SHORT);
            notificacion.show();
        }
    });    
}


protected void onPause(){
    unregisterReceiver(wifiReciever);
    super.onPause();
}

protected void onResume(){
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    super.onResume();
}


private class WifiScanReceiver extends BroadcastReceiver {
    public void onReceive(Context c, Intent intent){

        WifiInfo nombre1 = wifi.getConnectionInfo();
        TextView name = (TextView) findViewById(R.id.textView);
        name.setText(nombre1.getSSID());

        List<ScanResult> wifiScanList = wifi.getScanResults();
        wifis = new String[wifiScanList.size()];

             for (int i=0; i<wifiScanList.size(); i++){            
            wifis[i]=((wifiScanList.get(i)).toString());
        }

        lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, wifis));
    }
}

Solo me muestra la lista a partir de 'capabilities'pero el nombre de la red no lo muestra. Solo usando:

WifiInfo nombre1 = wifi.getConnectionInfo();
TextView name = (TextView) findViewById(R.id.textView);
name.setText(nombre1.getSSID());

Es que puedo mostrar en un TextView el nombre de la Red Wifi pero si no estoy conectada a ninguna red no me muestra el nombre.

Por otro lado, los permisos que declare en 'Android Manifest' son:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1 Answers1

1

Lo que deseas obtener son los SSID en la WLAN y los puedes determinar de esta forma:

 WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        List<ScanResult> wifilist = wifiManager.getScanResults();
        for(int i=0;i<wifilist.size();i++) {
            Log.d("detectWIFI", "SSID: " +  wifilist.get(i).SSID );
        }

En cuanto a lo que comentas:

Es que puedo mostrar en un TextView el nombre de la Red Wifi pero si no estoy conectada a ninguna red no me muestra el nombre.

Esto es obvio, por ejemplo como podrías las propiedades de una WLAN en la que no estas conectada!.


En esta pregunta puedes ver las formas de obtener el SSID:

Problema al escanear redes Wifi en Android

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • Muchas gracias. Resolvi el problema. Ahora me surge un nuevo inconveniente... Pruebo este mismo código en un tlf Android API 25 y no escanea las redes, en cambio con otros de menor API si.. AYUDAAAA!!! – Heidi Medina Apr 10 '18 at 13:25
  • @HeidiMedina , si tienes un dispositivo con API 25 los permisos se deben requerir manualmente. – Jorgesys Apr 10 '18 at 14:30