👨🏻‍💻

Building simple WiFi scanner



Demo


Overview

  1. Declare permissions in Manifest.
  1. Request permissions at runtime.
  1. Get a handle to the default WiFi service with WiiManager.
  1. Register BroadcastReceiver and start the scanning process.
  1. 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();
        }
    }
};

Source code

https://github.com/tuttelikz/WifiSimple