Display list of WiFi Networks in Android

Hello everyone!

Android provides the WiFiManager class for managing all aspects of WiFi connectivity. It is used to to define the names of various Intent actions that are broadcast upon any sort of change in WiFi state.

Through this post, we will learn how to display a list of available WiFi networks to which an Android device can be connected. The list can be viewed and updated, and attributes of individual entries can be modified.

Pre-requisites: Android SDK

In any of your existing Android projects, create a new Activity named CheckWifiNetworkActivity and add the following code!

CheckWifiNetworkActivity.java

package com.app.wifi;

import java.util.List;
import android.annotation.SuppressLint;
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.widget.TextView;

public class CheckWifiNetworkActivity extends Activity {

	private StringBuilder sb = new StringBuilder();
	private TextView tv;
	List<ScanResult> scanList;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main); 
		tv= (TextView)findViewById(R.id.txtWifiNetworks);
		getWifiNetworksList();
	}
	private void getWifiNetworksList(){      
		IntentFilter filter = new IntentFilter();
		filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
		final WifiManager wifiManager = 
				(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);;
				registerReceiver(new BroadcastReceiver(){

					@SuppressLint("UseValueOf") @Override
					public void onReceive(Context context, Intent intent) {
						sb = new StringBuilder();
						scanList = wifiManager.getScanResults();
						sb.append("\n  Number Of Wifi connections :" + " " +scanList.size()+"\n\n");    
						for(int i = 0; i < scanList.size(); i++){
							sb.append(new Integer(i+1).toString() + ". ");
							sb.append((scanList.get(i)).toString());
							sb.append("\n\n");
						}

						tv.setText(sb);  
					}

				},filter);        
		wifiManager.startScan();
	}
}

activity.main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
      <TextView
        android:id="@+id/txtWifiNetworks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
 
</RelativeLayout>

Make sure you add the necessary permissions in the manifest file!

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.wifi"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
   
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.app.wifi.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Save all changes and run the application on an Android device. If no errors occur then you should see the following output!

detect_wifi_network

Hope this helps. Stay tuned for more! 😄