Building simple WiFi scanner
Demo

Overview
- Declare permissions in
Manifest
.
- Request
permissions
at runtime.
- Get a handle to the default WiFi service with
WiiManager
.
- Register
BroadcastReceiver
and start the scanning process.
- Get scan results & unregister
BroadcastReceiver
.
How to build
Step 1. Declare permissions in Manifest.
<!-- AndroidManifest.xml -->
<manifest ...">
...
<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_FINE_LOCATION" />
...
</manifest>
Step 2. Request permissions
at runtime.
/* MainActivity.java */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
// check for permissions
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) {
String[] permission = {Manifest.permission.ACCESS_FINE_LOCATION};
requestPermissions(permission, PERMISSION_CODE);
} else {
startWifiManager();
}
...
}
Step 3. Get a handle to the default WiFi service with WiFiManager
.
/* MainActivity.java */
public void startWifiManager() {
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
wifiManager.setWifiEnabled(true);
}
scanWifiNetworks();
}
Step 4. Register BroadcastReceiver
and start the scanning process.
/* MainActivity.java */
private void scanWifiNetworks(){
arraylist.clear();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
this.registerReceiver(wifiReceiver, intentFilter);
wifiManager.startScan();
Log.d("WifScanner", "Scanning Wifi Networks");
Toast.makeText(this, "Scanning started...", Toast.LENGTH_SHORT).show();
}
Step 5. Get scan results & unregister BroadcastReceiver
.
/* MainActivity.java */
private final BroadcastReceiver wifiReceiver= new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent intent) {
scanResults = wifiManager.getScanResults();
scanResultsSize = scanResults.size();
unregisterReceiver(this);
try {
while (scanResultsSize >= 0) {
scanResultsSize--;
arraylist.add(scanResults.get(scanResultsSize).SSID);
adapter.notifyDataSetChanged();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};