Scan for wireless networks in the current area. first posted on anddev by nas061000
package com.android.wifitester;
import java.util.List;
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.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class WifiTester extends Activity {
TextView mainText;
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainText = (TextView) findViewById(R.id.mainText);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
mainText.setText("\\nStarting Scan...\\n");
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
mainWifi.startScan();
mainText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);
}
protected void onPause() {
unregisterReceiver(receiverWifi);
super.onPause();
}
protected void onResume() {
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
for(int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ".");
sb.append((wifiList.get(i)).toString());
sb.append("\\n");
}
mainText.setText(sb);
}
}
}
6 Comments
Nice post,
um, it worked thanks!
Thanks for writing, most people don't bother.
Thank you It works just fine. Very Helpful
what if i use listview and arrayadapter instead of textview and add different wifi network in list and then clicking at particular item, i can connect to it. is this even possible? if yes can you please explain how to do it?
Just awesome. That works perfectly fine. All you need to do is add Access_wifi_state and change_wifi_state permissions.
Thank you
can we send another string when we try to broadcast our wifi state ?
so when we receive it on BroadcastReceiver we could check what message given. Is it possible?
Got a little problem with this... I also checked some other codes but either they dont work or like here - DOES work but the BSSID (mac) and not even the ESSID (name) is shown. Everything else (encryption, frequency...) is shown and seems legit (excluding distance and distanceSd (which are just "?") but I dont need them anyways). There are also no strange characters or anything - just nothing. And the essid's arent cloaked (hidden essid) - e.g. WiFiFoFum works fine. Tested on Galaxy Note 3 running 4.4.2 not rooted. Will check on Moto G running CM11 4.4.4 later and if it works there - I'll report. Thanks anyways.