Skip to content Skip to sidebar Skip to footer

ANDROID:- Not Able To Get The Available Wifi List Using ScanResult

I'm trying to list available wifi network by ScanResult. Can anyone tell me what's wrong in my code? I'm not getting the desired output. Here's My code: public class Activity_scanw

Solution 1:

Try this code

WifiList.java

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.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife; 


public class WifiList extends Activity {

            WifiManager mWifiManager;
            ArrayList<String> mWifiList;

            @BindView(R.id.lst_wifilist)
            ListView lst_wifilist;

            @BindView(R.id.ll_scan)
            LinearLayout ll_scan;

            @Override
            protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_wifilist);
                ButterKnife.bind(this);
                mWifiList = new ArrayList<>();
                mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                mWifiList.clear();

                scanNetwork();
    }

    private void scanNetwork() {
            registerReceiver(mWifiScanReceiver,
                    new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            mWifiManager.startScan();
        }

        private final BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent intent) {
                if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
                    List<ScanResult> mScanResults = mWifiManager.getScanResults();
                    // add your logic here
                    mWifiList.clear();
                    for (int i = 0; i < mScanResults.size(); i++) {
                        Log.e("Scanned Wifi Name :- ", mScanResults.get(i).SSID);
                        mWifiList.add(mScanResults.get(i).SSID);

                        WifiListAdapter adapter = new WifiListAdapter(WifiList.this, mWifiList);
                        lst_wifilist.setAdapter(adapter);
                    }
                }
            }
        };
    }

AndroidMenifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

Solution 2:

    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.content.ServiceConnection;
    import android.net.Uri;
    import android.net.wifi.ScanResult;
    import android.net.wifi.WifiManager;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.util.List;

    public class MainActivity extends Activity {
    private StringBuilder sb = new StringBuilder();
    List<ScanResult> scanList;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      textView = (TextView)findViewById(R.id.textView);
      getWifiNetworksList();
    }

    private void getWifiNetworksList(){
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        final WifiManager wifiManager =
                   (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        wifiManager.startScan();
    registerReceiver(new BroadcastReceiver(){
    @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");
    }
      Toast.makeText(getApplicationContext(),""+sb.toString(),Toast.LENGTH_LONG).show();
       textView.setText(sb);
       }
      },filter);
     }
    }

Manifest:

        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

EDIT: enter image description here


Solution 3:

Try this code:

Manifest Permission:

android:name="android.permission.ACCESS_WIFI_STATE" android:name="android.permission.CHANGE_WIFI_STATE"

Activity

public class MainActivity extends Activity implements OnClickListener {

    Button setWifi;
    ListView listViwProvider;

    WifiManager wifiManager;
    WifiReceiver receiverWifi;
    List<ScanResult> wifiList;
    List<String> listOfProvider;
    ListAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listOfProvider = new ArrayList<String>();
        listViwProvider = (ListView) findViewById(R.id.list_view_wifi);
        setWifi = (Button) findViewById(R.id.btn_wifi);

        setWifi.setOnClickListener(this);
        wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

        if (wifiManager.isWifiEnabled() == true) {
            setWifi.setText("ON");
            scaning();
        }else {
            wifiManager.setWifiEnabled(true);
            setWifi.setText("ON");
            scaning();
        }

        listViwProvider.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                    ImportDialog action = new ImportDialog(MainActivity.this, (wifiList.get(position)).toString());
                    action.showDialog();
            }
        });
    }

    private void scaning() {
        receiverWifi = new WifiReceiver();
        registerReceiver(receiverWifi, new IntentFilter(
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifiManager.startScan();

    }

    @Override
    public void onClick(View arg0) {
        if (wifiManager.isWifiEnabled() == true) {
            wifiManager.setWifiEnabled(false);
            setWifi.setText("OFF");
            listViwProvider.setVisibility(ListView.GONE);
        } 
        else if (wifiManager.isWifiEnabled() == false) {
            wifiManager.setWifiEnabled(true);
            setWifi.setText("ON");
            listViwProvider.setVisibility(ListView.VISIBLE);
            scaning();
        }
    }

    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiverWifi);
    }

    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) {
            wifiList = wifiManager.getScanResults();
            Collections.sort(wifiList, new Comparator<ScanResult>() {
                @Override
                public int compare(ScanResult lhs, ScanResult rhs) {
                    return (lhs.level > rhs.level ? -1
                            : (lhs.level == rhs.level ? 0 : 1));
                }
            });
            listOfProvider.clear();
            String providerName;
            for (int i = 0; i < wifiList.size(); i++) {
                providerName = (wifiList.get(i).SSID).toString()
                        +"\n"+(wifiList.get(i).BSSID).toString();
                listOfProvider.add(providerName);
            }
            adapter = new ListAdapter(MainActivity.this, listOfProvider);
            listViwProvider.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    }
}

Adapter

public class ListAdapter extends ArrayAdapter<String> {
    Activity mActivity;
    List<String> wifiName;
    private LayoutInflater inflater;

    public ListAdapter(Activity a, List<String> wifiName) {
        super(a, R.layout.single_list, wifiName);
        mActivity = a;
        inflater = LayoutInflater.from(mActivity);
        this.wifiName = wifiName;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = inflater.inflate(R.layout.single_list, parent, false);
        TextView wifiProvider = (TextView) convertView
                .findViewById(R.id.txt_wifi_provider);
        wifiProvider.setText(wifiName.get(position));
        return convertView;
    }

}

Post a Comment for "ANDROID:- Not Able To Get The Available Wifi List Using ScanResult"