Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get Android Wifi Scan Results into a list?

I know how to get a <List> of Android Wifi Scans but I can not figure out the best way to make a list adapter out of them. I would like to just bind SSID and BSSID from a <List> of scans to text1 and text2.

Samples of what I have been doing

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

And:

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);     } 
like image 940
Seth Hikari Avatar asked Mar 27 '11 22:03

Seth Hikari


2 Answers

Try this code

public class WiFiDemo extends Activity implements OnClickListener  {           WifiManager wifi;            ListView lv;     TextView textStatus;     Button buttonScan;     int size = 0;     List<ScanResult> results;      String ITEM_KEY = "key";     ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();     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<String, String> item = new HashMap<String, String>();                                        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"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:layout_margin="16dp"     android:orientation="vertical">      <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:gravity="center_vertical"         android:orientation="horizontal">          <TextView             android:id="@+id/textStatus"             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_weight="1"             android:text="Status" />          <Button             android:id="@+id/buttonScan"             android:layout_width="wrap_content"             android:layout_height="40dp"             android:text="Scan" />     </LinearLayout>      <ListView         android:id="@+id/list"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_marginTop="20dp"></ListView> </LinearLayout> 

For ListView- row.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:orientation="vertical"     android:padding="8dp">      <TextView         android:id="@+id/list_value"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:textSize="14dp" /> </LinearLayout> 

Add these permission in AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
like image 151
Anshul Avatar answered Oct 04 '22 04:10

Anshul


In addition for the accepted answer you'll need the following permissions into your AndroidManifest to get it working:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
like image 30
Carlos Avatar answered Oct 04 '22 03:10

Carlos