0

i am student and i must create an application that connect to a wifi. I could view a list wifi and create a button "connected" and "disconnected". But i don't know how to connect to wifi from the list i created. Here are my codes.

WifiItem:

public class WifiItem {
   private String APName;
   private String AdresseMac;
   private int ForceSignal;

   public String getAPName() {
       return APName;
   }
   public void setAPName(String aPName) {
       APName = aPName;
   }
   public String getAdresseMac() {
       return AdresseMac;
   }
   public void setAdresseMac(String adresseMac) {
       AdresseMac = adresseMac;
   }
   public int getForceSignal() {
       return ForceSignal;
   }
   public void setForceSignal(int forceSignal) {
       ForceSignal = forceSignal;
   }
}

WifiBroadcastReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.widget.Toast;
import android.util.Log;
import java.util.List;

public class WifiBroadcastReceiver extends BroadcastReceiver {

private WifiManager wifiManager;
private WifiAdapter wifiAdapter;
private List<WifiItem> listeWifiItem;

@Override
public void onReceive(Context context, Intent intent) {
    wifiManager = ((MainActivity) context).getCurrentWifiManager();
    wifiAdapter = ((MainActivity) context).getWifiAdapter();
    listeWifiItem = ((MainActivity) context).getListeWifiItem();

    if (wifiManager != null) {

        if (wifiManager.isWifiEnabled()) {
            List<ScanResult> listeScan = wifiManager.getScanResults();

            listeWifiItem.clear();

            for (ScanResult scanResult : listeScan) {
                WifiItem item = new WifiItem();

                item.setAdresseMac(scanResult.BSSID);
                item.setAPName(scanResult.SSID);
                item.setForceSignal(scanResult.level);

                Log.d("Formation Wifi", scanResult.SSID + " LEVEL "
                        + scanResult.level);

                listeWifiItem.add(item);
            }

            wifiAdapter.notifyDataSetChanged();
        } else {
            Toast.makeText(context, "Vous devez activer votre WiFi",
                    Toast.LENGTH_SHORT);
        }
    }
  }
}

WifiAdapter:

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.content.Context;
import android.widget.TextView;
import android.widget.BaseAdapter;
import android.graphics.Color;
import java.util.List;

public class WifiAdapter extends BaseAdapter {


private List<WifiItem> listeWifiItem;
private LayoutInflater layoutInflater;

public WifiAdapter(Context context, List<WifiItem> objects) {

    listeWifiItem = objects;
    layoutInflater = LayoutInflater.from(context);
}

public int getCount() {
    return listeWifiItem.size();
}

public Object getItem(int position) {
    return listeWifiItem.get(position);
}

public long getItemId(int position) {
    return position;
}

private class ViewWifiHolder {
    TextView tvApName;
    TextView tvAdresseMac;
    TextView ForceSignal;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewWifiHolder viewHolder;

    if (convertView == null) {
        viewHolder = new ViewWifiHolder();

        convertView = layoutInflater.inflate(R.layout.content_main, null);

        viewHolder.tvApName = (TextView) convertView.findViewById(R.id.tvWifiName);
        viewHolder.tvAdresseMac = (TextView) convertView.findViewById(R.id.tvWifiMac);
        viewHolder.ForceSignal = (TextView) convertView.findViewById(R.id.ForceSignal);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewWifiHolder) convertView.getTag();
    }


    viewHolder.tvApName.setText(listeWifiItem.get(position).getAPName());
    viewHolder.tvAdresseMac.setText(listeWifiItem.get(position).getAdresseMac());

    // color is changed depending on the signal strength
    if (listeWifiItem.get(position).getForceSignal() <= -80) {
        viewHolder.ForceSignal.setBackgroundColor(Color.GREEN);
    } else if (listeWifiItem.get(position).getForceSignal() <= -50) {
        viewHolder.ForceSignal.setBackgroundColor(Color.YELLOW);
    } else {
        viewHolder.ForceSignal.setBackgroundColor(Color.RED);
    }

    return convertView;
  }
}

And my MainActivity:

import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ListView;
import android.view.View;
import android.content.Context;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

private Button activer;
private Button desactiver;
private Button boutonRechercher;
private ListView listeViewWifi;
private List<WifiItem> listeWifiItem;
private WifiAdapter wifiAdapter;
private WifiManager wifiManager;
private WifiBroadcastReceiver broadcastReceiver;

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

    activer = (Button) findViewById(R.id.activer);
    activer.setOnClickListener(new View.OnClickListener()
    {
        public void onClick (View v)
        {
            startWifi();
        }

    });

    desactiver = (Button) findViewById(R.id.desactiver);
    desactiver.setOnClickListener(new View.OnClickListener()
    {
        public void onClick (View v)
        {
            stopWifi();
        }
    });

    listeViewWifi = (ListView) findViewById(R.id.listViewWifi);
    boutonRechercher = (Button) findViewById(R.id.buttonRefresh);

    boutonRechercher.setOnClickListener (new View.OnClickListener()
    {
        public void onClick(View v)
        {
            if(wifiManager != null)
                wifiManager.startScan();
        }
    });

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

    listeWifiItem = new ArrayList<WifiItem>();
    wifiAdapter = new WifiAdapter(this, listeWifiItem);
    listeViewWifi.setAdapter(wifiAdapter);

    // Creating the broadcast Receiver
    broadcastReceiver = new WifiBroadcastReceiver();

    // The receiver is attached to the scan result
    registerReceiver(broadcastReceiver, new IntentFilter(
            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

}

// We stop the receiver when you pause the application
@Override
protected void onPause() {
    unregisterReceiver(broadcastReceiver);
    super.onPause();
}

// Started It puts the receiver back on when the application
@Override
protected void onResume() {
    registerReceiver(broadcastReceiver, new IntentFilter(
            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    super.onResume();
}

public void startWifi() {
    WifiManager wM = (WifiManager) getSystemService(WIFI_SERVICE);
    wM.setWifiEnabled(true);
}

public void stopWifi(){
    WifiManager wM = (WifiManager) getSystemService(WIFI_SERVICE);
    wM.setWifiEnabled(false);
}


public WifiManager getCurrentWifiManager() {
    return wifiManager;
}

public WifiAdapter getWifiAdapter() {
    return wifiAdapter;
}

public List<WifiItem> getListeWifiItem() {
    return listeWifiItem;
}

}

Thanks you for you reply and i am sorry for my English, i am French :)

  • 4
    check this question answer, http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically – Silvans Solanki Apr 06 '16 at 14:24
  • The problem is that I do not know where to put the code that provides the answer of the question 8818290 – boobasparte Apr 06 '16 at 21:04

0 Answers0