3

Estoy intentando escanear las redes WiFi disponibles. Solo necesito una lista con sus SSID, pero la aplicación se para cuando llega al this.wifilist = this.wifiManager.getScanResults(); Os agradecería si me echais una manita, soy bastante noob programando. Gracias

public class MainActivity extends AppCompatActivity {

private String ssid = "RasPi";
private WifiManager wifiManager;
private List<ScanResult> wifilist;
private ArrayList<String> idList = new ArrayList<String>();
private ArrayAdapter<String> arrayAdapter;
private ListView listView;


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

    listView = (ListView)findViewById(R.id.listView);
    Log.d("TAG","empezando");

    detectWifi();




}
public void detectWifi(){
    this.wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    Log.d("TAG","antes de start");
    this.wifiManager.startScan();
    Log.d("TAG","despues del start");
    this.wifilist = this.wifiManager.getScanResults();


    for(int i=0;i<wifilist.size();i++) {
        Log.d("TAG","Antes del getScanResults");
        Log.d("TAG","Despues, antes de add a idList");
        idList.add(i,wifilist.toString());
    }

    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,idList);
    listView.setAdapter(arrayAdapter);

}

}

jasilva
  • 4,972
  • 6
  • 29
  • 45
wasous
  • 139
  • 10
  • Es importante que cuando ocurra un error, revises el LogCat esto para no estar a ciegas buscando la causa de un problema que puede tener infinidad causas. – Jorgesys May 17 '17 at 19:24

1 Answers1

2

Agrega en tu AndroidManifest.xml los permisos:

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

Si únicamente deseas el SSID puedes obtenerlo de esta forma:

WifiInfo info = wifiManager.getConnectionInfo ();
String ssid =info.getSSID();

o de esta forma cuando ya tiene una lista de ScanResult :

List<ScanResult> wifilist = wifiManager.getScanResults();
String ssid = wifilist.get(<indice elemento>).SSID;

Por lo tanto si quieres almacenar todos los SSID en tu List, se realizaría de esta forma:

public void detectWifi(){
    wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifilist = this.wifiManager.getScanResults();
    String ssid ="";
    for(int i=0;i<wifilist.size();i++) {
        ssid = wifilist.get(i).SSID;
        idList.add(ssid);
        Log.d("detectWIFI", "SSID: " +ssid);
    }
}

*Importante: para que se muestren los SSID es importante habilitar los servicios de geolocalización.

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • Perfecto, gracias. Ahora para comparar las ssid con la que yo quiero como lo hago? el info.getSSID me devuelve una string con comillas así "RasPi" y cuando la comparo con mi ssid no me lo acepta porque no le puedo poner las comillas. ejemplo "RasPi"!=RasPi y siempre entra en el if(). Y si pongo `myssid=""Raspi"";`no me coge RasPi como String. :( – wasous May 18 '17 at 14:39
  • 1
    @wasous amigo la comparación de strings debe realizarse mediante equals(), por ejemplo if(!ssid.equals("RasPi")){ ...... es por eso que entra al if siempre. si tienes más duda agrega tu código.https://es.stackoverflow.com/questions/52020/programa-no-me-detecta-null/52028#52028 – Jorgesys May 18 '17 at 15:02
  • 1
    Ya me funciona! Muchísimas gracias. Me siento un poco tonto después de preguntar lo de el if jaja. – wasous May 18 '17 at 15:20