Problem when scanning Wi-Fi networks on Android

3

I'm trying to scan the available WiFi networks. I just need a list with their SSID, but the application stops when it reaches this.wifilist = this.wifiManager.getScanResults(); I would appreciate if you throw me a little hand, I'm quite noob programming. Thanks

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

}

}

    
asked by wasous 17.05.2017 в 20:05
source

1 answer

2

Add permissions in your AndroidManifest.xml :

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

If you only want the SSID you can get it this way:

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

or in this way when you already have a list of ScanResult :

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

So if you want to store all the SSID in your List, it would be done this way:

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

* Important : in order to display the SSID it is important to enable geolocation services.

    
answered by 17.05.2017 / 21:20
source