2

I wish to create an application, that detects the available wifi connections in the vicinity, and then connects to them. What I have done till now, is that I created a ListView that lists the available wifi connections, and then I created a LongItemClick dialog box, that shows the SSID and the BSSID of the network, and asks for the password. Now, I wish to connect to one of the networks, independent of what kind of network it is, it might be WEP, WPA or Open too. I am unable to get an overview of how should I connect to them. Can anyone help me with this ? I searched all available answers, and I didn't find any answer, that could help me do this!

I try the above thing by the below method. I create a list view of all the available wi-fi networks in the vicinity, and then I try to show the connection info on long press, and give an option to connect to the clicked wi-fi network via click.

Code:

package com.example.random;



import java.util.ArrayList;
import java.util.HashMap;    
import java.util.Iterator;
import java.util.List;    

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.FragmentManager;
import android.app.ListActivity;
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.WifiConfiguration.AuthAlgorithm;
import android.net.wifi.WifiConfiguration.GroupCipher;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiConfiguration.PairwiseCipher;
import android.net.wifi.WifiConfiguration.Protocol;
import android.net.wifi.WifiManager;    
import android.os.Bundle;    
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;   
import android.view.LayoutInflater;
import android.view.View;    
import android.view.View.OnClickListener;    
import android.view.ViewGroup;
import android.widget.AdapterView;    
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;    
import android.widget.EditText;
import android.widget.ListView;    
import android.widget.SimpleAdapter;    
import android.widget.TextView;    
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements OnClickListener
 {      
    WifiManager wifi;       
    ListView lv;
//    TextView textStatus;
    Button buttonScan;
    int size = 0;
    List<ScanResult> results;
    final Context context = this;
    EditText pass;
    String checkPassword = null;

    String ITEM_KEY = "key";
    ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();
    SimpleAdapter adapter;

    /* Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

//        textStatus = (TextView) findViewById(R.id.textStatus);
        buttonScan = (Button) findViewById(R.id.buttonScan);
        buttonScan.setOnClickListener(this);
        lv = (ListView)findViewById(R.id.list);
        lv.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                connectToWifi(arg2);
            }



                private void connectToWifi(final int position)
                        {
                    final Dialog dialog = new Dialog(context);
                    dialog.setContentView(R.layout.connect);
                    dialog.setTitle("Connect to Network");
                    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID);
                    TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID);
                    TextView capabilities = (TextView) dialog.findViewById(R.id.textCapabilities);

                    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                    pass = (EditText) dialog.findViewById(R.id.textPassword);
                    textSSID.setText(results.get(position).SSID);
                    textBSSID.setText(results.get(position).BSSID);
                    capabilities.setText(results.get(position).capabilities);
//                                      
                    // if button is clicked, connect to the network;
                    dialogButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            checkPassword = pass.getText().toString();
                            finallyConnect(checkPassword);
                            dialog.dismiss();
                        }

                        private void finallyConnect(String checkPassword) {
                            String networkSSID = results.get(position).SSID;
                            String networkPass = checkPassword;

                            WifiConfiguration wifiConfig = new WifiConfiguration();
                            wifiConfig.SSID = String.format("\"%s\"", networkSSID);
                            wifiConfig.preSharedKey = String.format("\"%s\"", networkPass);

                            WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
                            //remember id
                            int netId = wifiManager.addNetwork(wifiConfig);
                            wifiManager.disconnect();
                            wifiManager.enableNetwork(netId, true);
                            wifiManager.reconnect();



                            WifiConfiguration conf = new WifiConfiguration();
                            conf.SSID = "\"\"" + networkSSID + "\"\"";
                            conf.preSharedKey = "\""+ networkPass +"\"";
                            WifiManager wifiManager1 = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
                            wifiManager1.addNetwork(conf);

//                          List<WifiConfiguration> list = wifiManager1.getConfiguredNetworks();
//                          for( WifiConfiguration i : list ) {
//                              if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
//                                   wifiManager1.disconnect();
//                                   
//                                  wifiManager1.enableNetwork(i.networkId, true);
//                                  if(wifiManager1.reconnect()){
////                                    int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
////                                    Toast.makeText(getApplicationContext(), ipAddress, Toast.LENGTH_SHORT).show();
//                                  Toast.makeText(getApplicationContext(), networkSSID + " "+ "Connection successful", Toast.LENGTH_SHORT).show();                              
//                                  }
//                                  else{
//                                  Toast.makeText(getApplicationContext(), "Connection Failed", Toast.LENGTH_SHORT).show();
//                                  }
//                                  
//                                   break;
//                                         
//                              }
//                          }

                        }
                    });
                    dialog.show();
                }
       });

        lv.setOnItemLongClickListener(new OnItemLongClickListener(){

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                showWifiSettings(arg2);
                return true;
            }

            private void showWifiSettings(int arg2) {
                showDialogOfOptions(arg2);
                    }

            private void showDialogOfOptions(int arg2) {
                // Create a custom Dialog
                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.custom);
                dialog.setTitle("Network details");
                TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID);
                TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID);
                Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                textSSID.setText(results.get(arg2).SSID);
                textBSSID.setText(results.get(arg2).BSSID);
                // if button is clicked, close the custom dialog
                dialogButton.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

                dialog.show();
              }
            });

        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (wifi.isWifiEnabled() == false)
        {
            Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
            wifi.setWifiEnabled(true);
        }   

        this.adapter = new SimpleAdapter(MainActivity.this, arraylist, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value });
        lv.setAdapter(this.adapter);

        registerReceiver(new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context c, Intent intent) 
            {
               results = wifi.getScanResults();
               size = results.size();
            }
        }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));                    
    }

//    protected void connectionStatus(String password) {
//      // TODO Auto-generated method stub
//      
//      
//  }

    public void onClick(View view) 
    {


        arraylist.clear();          
        wifi.startScan();

        Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show();
        try 
        {
            size = size - 1;
            while (size >= 0) 
            {   
                HashMap<String, String> item = new HashMap<String, String>();
                item.put(ITEM_KEY, results.get(size).SSID.toString()+ results.get(size).capabilities.toString());

                arraylist.add(item);
                size--;
                adapter.notifyDataSetChanged();                 
            }


           }
        catch (Exception e)
        { }         
    }    
}

The application is running fine, but it does not connect to any of the Wifi networks. Any help please ?

BumbleBee
  • 103
  • 1
  • 3
  • 11
  • Have a look on http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically – Sunil Kumar Sahoo Jul 01 '14 at 10:43
  • I went through the answer already. I tried both the things that were there in it. Is there anything extra that needs to be done, when we are dealing with this thing in Nexus ? I mean, I am just guessing, I don't know, what the actual error is! – BumbleBee Jul 01 '14 at 10:45

3 Answers3

3
import java.util.ArrayList;
import java.util.HashMap;

import java.util.List;

import android.app.Activity;
import android.app.Dialog;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private WifiManager wifi;
    private ListView lv;
    // TextView textStatus;
    private Button buttonScan;
    private int size = 0;
    private List<ScanResult> results;
    private final Context context = this;
    private EditText pass;
    private String checkPassword = null;

    private String ITEM_KEY = "key";
    private ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();
    private SimpleAdapter adapter;
/* Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // textStatus = (TextView) findViewById(R.id.textStatus);
    buttonScan = (Button) findViewById(R.id.buttonScan);
    buttonScan.setOnClickListener(this);
    lv = (ListView) findViewById(R.id.list);
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            connectToWifi(arg2);
        }

    });

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            showWifiSettings(arg2);
            return true;
        }
    });

    if (wifi.isWifiEnabled() == false) {
        Toast.makeText(getApplicationContext(),
                "wifi is disabled..making it enabled", Toast.LENGTH_LONG)
                .show();
        wifi.setWifiEnabled(true);
    }

    adapter = new SimpleAdapter(MainActivity.this, arraylist,
            R.layout.row, new String[] { ITEM_KEY },
            new int[] { R.id.list_value });
    lv.setAdapter(adapter);

    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context c, Intent intent) {
            results = wifi.getScanResults();
            size = results.size();
        }
    }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}

// protected void connectionStatus(String password) {
// // TODO Auto-generated method stub
//
//
// }
@Override
public void onClick(View view) {

    arraylist.clear();
    wifi.startScan();

    Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show();
    try {
        size = size - 1;
        while (size >= 0) {
            HashMap<String, String> item = new HashMap<String, String>();
            item.put(ITEM_KEY,
                    results.get(size).SSID.toString()
                            + results.get(size).capabilities.toString());

            arraylist.add(item);
            size--;
            adapter.notifyDataSetChanged();
        }

    } catch (Exception e) {
    }
}

private void showWifiSettings(int arg2) {
    showDialogOfOptions(arg2);
}

private void showDialogOfOptions(int arg2) {
    // Create a custom Dialog
    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.custom);
    dialog.setTitle("Network details");
    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID);
    TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID);
    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
    textSSID.setText(results.get(arg2).SSID);
    textBSSID.setText(results.get(arg2).BSSID);
    // if button is clicked, close the custom dialog
    dialogButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();
}

private void finallyConnect(String checkPassword, int position) {
    String networkSSID = results.get(position).SSID;
    String networkPass = checkPassword;

    WifiConfiguration wifiConfig = new WifiConfiguration();
    wifiConfig.SSID = String.format("\"%s\"", networkSSID);
    wifiConfig.preSharedKey = String.format("\"%s\"", networkPass);

    // remember id
    int netId = wifi.addNetwork(wifiConfig);
    wifi.disconnect();
    wifi.enableNetwork(netId, true);
    wifi.reconnect();

    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"\"" + networkSSID + "\"\"";
    conf.preSharedKey = "\"" + networkPass + "\"";
    wifi.addNetwork(conf);

    // List<WifiConfiguration> list =
    // wifiManager1.getConfiguredNetworks();
    // for( WifiConfiguration i : list ) {
    // if(i.SSID != null && i.SSID.equals("\"" + networkSSID
    // + "\"")) {
    // wifiManager1.disconnect();
    //
    // wifiManager1.enableNetwork(i.networkId, true);
    // if(wifiManager1.reconnect()){
    // // int ipAddress =
    // wifiManager.getConnectionInfo().getIpAddress();
    // // Toast.makeText(getApplicationContext(), ipAddress,
    // Toast.LENGTH_SHORT).show();
    // Toast.makeText(getApplicationContext(), networkSSID +
    // " "+ "Connection successful",
    // Toast.LENGTH_SHORT).show();
    // }
    // else{
    // Toast.makeText(getApplicationContext(),
    // "Connection Failed", Toast.LENGTH_SHORT).show();
    // }
    //
    // break;
    //
    // }
    // }

}

private void connectToWifi(final int position) {
    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.connect);
    dialog.setTitle("Connect to Network");
    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID1);
    TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID1);
    TextView capabilities = (TextView) dialog
            .findViewById(R.id.textCapabilities);

    Button dialogButton = (Button) dialog.findViewById(R.id.okButton);
    pass = (EditText) dialog.findViewById(R.id.textPassword);
    textSSID.setText(results.get(position).SSID);
    textBSSID.setText(results.get(position).BSSID);
    capabilities.setText(results.get(position).capabilities);
    //
    // if button is clicked, connect to the network;
    dialogButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            checkPassword = pass.getText().toString();
            finallyConnect(checkPassword, position);
            dialog.dismiss();
        }

    });
    dialog.show();
}

}

balaji koduri
  • 1,321
  • 9
  • 25
  • i tryed your code it is working for me. it is connected to wifi. – balaji koduri Jul 01 '14 at 11:59
  • i modified my solution please try this. – balaji koduri Jul 01 '14 at 12:11
  • are you sure, this code is working, cz it wasn't working in my case. Any changes that you made ? – BumbleBee Jul 01 '14 at 12:48
  • Fine, the code is actually working. The only problem that is coming is that on clicking a list item, it is randomly searching items, as in, some other item gets selected in place of the selected one, maybe the prob is in the list view. If you can sort that out! – BumbleBee Jul 01 '14 at 13:02
  • i also faced the problem, i select 1st item it showing last item information, it maybe list view assigned items problem. – balaji koduri Jul 01 '14 at 13:19
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/56597/discussion-between-bumblebee-and-balaji-koduri). – BumbleBee Jul 01 '14 at 13:19
0

Hey BumbleBee I guess your doing this wrong,

  try {
        size = size - 1;
        while (size > 0) {
            HashMap<String, String> item = new HashMap<String, String>();
            item.put(ITEM_KEY,
                    results.get(size).SSID.toString()
                            + results.get(size).capabilities.toString());

            arraylist.add(item);

            for(int i=0;i<arraylist.size();i++)
            {
           Log.e("arraylist","items-->"+ arraylist.get(i));
                Log.e("arraylist", "sizze-->" + arraylist.size());
            }

            Log.e("item","hashmap item---> "+item);
            size--;

            adapter.notifyDataSetChanged();
        }
     catch (Exception e) {
    }
Instead try this,
            for(int k=0;k<size;k++){

            HashMap<String, String> item = new HashMap<String, String>();
            item.put(ITEM_KEY,
                    result_reference.get(k).SSID.toString()
                            + result_reference.get(k).capabilities.toString());

            arraylist.add(item);

            for(int i=0;i<arraylist.size();i++)
            {
                Log.e("arraylist","items-->"+ arraylist.get(i));
                Log.e("arraylist", "sizze-->" + arraylist.size());
            }

            // Log.e("item","hashmap item---> "+item);
           // size--;

            //adapter.notifyDataSetChanged();

        }
        lv.setAdapter(adapter);

    } catch (Exception e) {
    }

`

UserName_Untold
  • 165
  • 1
  • 13
  • 2
    Please try explaining WHY your answer works and the OP's doesn't. A simple answer may well answer the question, but many people will want to know how and why? – David Wilkinson Feb 01 '16 at 11:31
  • Because in his code, every time he is trying to access the same element by passing size as a parameter to the result_reference.get().SSID.toString() . Instead we need to access each and evry element of the list view. – UserName_Untold Feb 01 '16 at 11:46
  • 3
    you should add information like that to your answer - it'll help both the OP and others who may be interested... – David Wilkinson Feb 01 '16 at 11:47
  • There is still a issue with the code, which I'm trying to solve, I wish someone could help me with that. The onrecieve() of the reciever is called everytime before the onclick of the button, hence the size of the scanned wifi result is changing, but reflected only when the user clicks the button. Hence causing an inconsistency in the array index and size and throws a NullPointerException. Can anyone tell me how to solve that problem? – UserName_Untold Feb 01 '16 at 11:48
0

This code works 100% It searches the list of WiFi available and displays it on list view ,and by clicking on the list view a dialog box appears showing SSID ,BSSID and password to enter . It works fine .

MainActivity :

import android.annotation.SuppressLint;

import android.app.Dialog;

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.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private WifiManager wifi;

WifiScanReceiver wifiReciever;

private ListView lv;

// TextView textStatus;

private Button buttonScan;

private int size = 0;

private List<ScanResult> results;

private final Context context = this;

private EditText pass;

private String checkPassword = null;

private String ITEM_KEY = "key";

private ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();

private SimpleAdapter adapter;

String wifis[];




@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    buttonScan = (Button) findViewById(R.id.buttonScan);

    buttonScan.setOnClickListener(this);

    lv = (ListView) findViewById(R.id.list);

    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    wifiReciever = new WifiScanReceiver();

    wifi.startScan();


    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {

            // TODO Auto-generated method stub

            connectToWifi(arg2);
        }

    });

    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override

        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                       int arg2, long arg3) {

            // TODO Auto-generated method stub

            showWifiSettings(arg2);

            return true;
        }
    });

    if (wifi.isWifiEnabled() == false) {

        Toast.makeText(getApplicationContext(),

                "wifi is disabled..making it enabled", Toast.LENGTH_LONG)
                .show();

        wifi.setWifiEnabled(true);
    }

    this.adapter = new SimpleAdapter(MainActivity.this, arraylist,
            R.layout.custom  , new String[] { ITEM_KEY },      //concentrate
            new int[] { R.id.list });
    lv.setAdapter(adapter);


    registerReceiver(new BroadcastReceiver() {

        @Override

        public void onReceive(Context c, Intent intent) {

            results = wifi.getScanResults();

            size = results.size();
        }

    }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}

@Override

public void onClick(View view) {

    //arraylist.clear();

    wifi.startScan();

    Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show();
    try {

        size = size - 1;

        while (size >= 0) {

            HashMap<String, String> item = new HashMap<String, String>();
            item.put(ITEM_KEY,
                    results.get(size).SSID.toString()
                            + results.get(size).capabilities.toString());

            arraylist.add(item);

            size--;

            adapter.notifyDataSetChanged();
        }

    } catch (Exception e) {

    }
}
protected void onPause() {

    unregisterReceiver(wifiReciever);

    super.onPause();
}

protected void onResume() {

    registerReceiver(wifiReciever, new IntentFilter(
            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

    super.onResume();

}


class WifiScanReceiver extends BroadcastReceiver {

    @SuppressLint("UseValueOf")

    public void onReceive(Context c, Intent intent) {

        List<ScanResult> wifiScanList = wifi.getScanResults();

        wifis = new String[wifiScanList.size()];

        for(int i = 0; i < wifiScanList.size(); i++){

            wifis[i] = ((wifiScanList.get(i)).toString());

        }

        String filtered[] = new String[wifiScanList.size()];

        int counter = 0;

        for (String eachWifi : wifis) {

            String[] temp = eachWifi.split(",");

            filtered[counter] = temp[0].substring(5).trim()+"\n" + temp[2].substring(12).trim()+"\n" +temp[3].substring(6).trim();//0->SSID, 2->Key Management 3-> Strength


            counter++;

        }

        lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_1, filtered));


    }

}

private void showWifiSettings(int arg2) {

    showDialogOfOptions(arg2);
}

private void showDialogOfOptions(int arg2) {

    // Create a custom Dialog
    final Dialog dialog = new Dialog(context);

    dialog.setContentView(R.layout.custom);

    dialog.setTitle("Network details");

    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID1);

    TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID1);

    Button dialogButton = (Button) dialog.findViewById(R.id.okButton);

    textSSID.setText(results.get(arg2).SSID);

    textBSSID.setText(results.get(arg2).BSSID);

    // if button is clicked, close the custom dialog

    dialogButton.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            dialog.dismiss();
        }
    });

    dialog.show();
}

private void finallyConnect(String checkPassword, int position) {

    String networkSSID = results.get(position).SSID;

    String networkPass = checkPassword;

    WifiConfiguration wifiConfig = new WifiConfiguration();

    wifiConfig.SSID = String.format("\"%s\"", networkSSID);

    wifiConfig.preSharedKey = String.format("\"%s\"", networkPass);

    // remember id

    int netId = wifi.addNetwork(wifiConfig);

    wifi.disconnect();

    wifi.enableNetwork(netId, true);

    wifi.reconnect();


    WifiConfiguration conf = new WifiConfiguration();

    conf.SSID = "\"\"" + networkSSID + "\"\"";

    conf.preSharedKey = "\"" + networkPass + "\"";

    wifi.addNetwork(conf);
}

private void connectToWifi(final int position) {

    final Dialog dialog = new Dialog(context);

    dialog.setContentView(R.layout.custom);

    dialog.setTitle("Connect to Network");

    TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID1);

    TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID1);

    TextView capabilities = (TextView) dialog
            .findViewById(R.id.textCapabilities);

    Button dialogButton = (Button) dialog.findViewById(R.id.okButton);

    pass = (EditText) dialog.findViewById(R.id.textPassword);

    textSSID.setText(results.get(position).SSID);

    textBSSID.setText(results.get(position).BSSID);

    capabilities.setText(results.get(position).capabilities);
    //
    // if button is clicked, connect to the network;
    dialogButton.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            checkPassword = pass.getText().toString();

            finallyConnect(checkPassword, position);

            dialog.dismiss();

        }

    });

    dialog.show();



}



@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

XML FILE: activity_main.xml

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="scan"
    android:id="@+id/buttonScan"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/list"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/buttonScan" />

Akash B
  • 31
  • 1
  • 1
  • 6