¿Cómo puedo obtener resultados de escaneo de Android WiFi en una lista?

Sé cómo obtener un Android Wifi Scans, pero no puedo encontrar la mejor manera de hacerles un adaptador de lista. Me gustaría simplemente enlazar SSID y BSSID desde un escaneo a texto1 y texto2.

Muestras de lo que he estado haciendo

wifi.startScan(); // get list of the results in object format ( like an array ) List results = wifi.getScanResults();` // loop that goes through list for (ScanResult result : results) { Toast.makeText(this, result.SSID + " " + result.level, Toast.LENGTH_SHORT).show(); 

Y:

 private void fillDataFromDb() { Cursor scanCursor = Db.fetchAllScans(); startManagingCursor(scanCursor);` // Create an array to specify the fields we want to display in the list // (only TITLE) String[] from = new String[] { WifiDbAdapter.KEY_BSSID, WifiDbAdapter.KEY_SSID }; // and an array of the fields we want to bind those fields to (in this // case just text1) int[] to = new int[] { R.id.text1, R.id.text2 }; // Now create a simple cursor adapter and set it to display SimpleCursorAdapter scansdb = new SimpleCursorAdapter(this, R.layout.scan_row, scanCursor, from, to); setListAdapter(scansdb); } 

Prueba este código

 public class WiFiDemo extends Activity implements OnClickListener { WifiManager wifi; ListView lv; TextView textStatus; Button buttonScan; int size = 0; List results; String ITEM_KEY = "key"; ArrayList> arraylist = new ArrayList>(); SimpleAdapter adapter; /* Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textStatus = (TextView) findViewById(R.id.textStatus); buttonScan = (Button) findViewById(R.id.buttonScan); buttonScan.setOnClickListener(this); lv = (ListView)findViewById(R.id.list); wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled() == false) { Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show(); wifi.setWifiEnabled(true); } this.adapter = new SimpleAdapter(WiFiDemo.this, arraylist, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value }); lv.setAdapter(this.adapter); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { results = wifi.getScanResults(); size = results.size(); } }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); } public void onClick(View view) { arraylist.clear(); wifi.startScan(); Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show(); try { size = size - 1; while (size >= 0) { HashMap item = new HashMap(); item.put(ITEM_KEY, results.get(size).SSID + " " + results.get(size).capabilities); arraylist.add(item); size--; adapter.notifyDataSetChanged(); } } catch (Exception e) { } } } 

WiFiDemo.xml :

 < ?xml version="1.0" encoding="utf-8"?>        

Para ListView- row.xml

 < ?xml version="1.0" encoding="utf-8"?>    

Agregue estos permisos en AndroidManifest.xml

     

Además de la respuesta aceptada, necesitarás los siguientes permisos en tu AndroidManifest para que funcione:

    

Envuelva un ArrayAdapter alrededor de su List . getView() para llenar sus filas con los datos de ScanResult . Aquí hay un extracto gratuito de uno de mis libros que cubre cómo crear ArrayAdapters personalizados como este.

Encuentre un ejemplo de trabajo completo a continuación:

El código de @Android es muy bueno, pero tiene algunos problemas, a saber:

  1. Es necesario trasladar la población al código ListView a onReceive of BroadCastReceiver donde solo estará disponible el resultado. En el caso, el resultado se obtiene en el segundo bash.
  2. BroadCastReceiver necesita ser no registrado después de obtener los resultados.
  3. size = size -1 parece innecesario.

Encuentre a continuación el código modificado de @Android como ejemplo de trabajo:

WifiScanner.java que es la actividad principal

 package com.arjunandroid.wifiscanner; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class WifiScanner extends Activity implements View.OnClickListener{ WifiManager wifi; ListView lv; Button buttonScan; int size = 0; List results; String ITEM_KEY = "key"; ArrayList arraylist = new ArrayList<>(); ArrayAdapter adapter; /* Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setTitle("Widhwan Setup Wizard"); setContentView(R.layout.activity_wifi_scanner); buttonScan = (Button) findViewById(R.id.scan); buttonScan.setOnClickListener(this); lv = (ListView)findViewById(R.id.wifilist); wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled() == false) { Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show(); wifi.setWifiEnabled(true); } this.adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arraylist); lv.setAdapter(this.adapter); scanWifiNetworks(); } public void onClick(View view) { scanWifiNetworks(); } private void scanWifiNetworks(){ arraylist.clear(); registerReceiver(wifi_receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); wifi.startScan(); Log.d("WifScanner", "scanWifiNetworks"); Toast.makeText(this, "Scanning....", Toast.LENGTH_SHORT).show(); } BroadcastReceiver wifi_receiver= new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { Log.d("WifScanner", "onReceive"); results = wifi.getScanResults(); size = results.size(); unregisterReceiver(this); try { while (size >= 0) { size--; arraylist.add(results.get(size).SSID); adapter.notifyDataSetChanged(); } } catch (Exception e) { Log.w("WifScanner", "Exception: "+e); } } }; } 

activity_wifi_scanner.xml, que es el archivo de diseño de la actividad

 < ?xml version="1.0" encoding="utf-8"?>     

Además, como se mencionó anteriormente, no olvide agregar permisos de Wifi en AndroidManifest.xml

   

consulte el enlace a continuación para obtener ScanResult con ssid redundante eliminado de la lista

duplicar SSID en el resultado de escaneo wifi