See my code below. This produces a listview with all available wificonnections. My goal is too connect to one of those available connections listed. I have tried several things but it won't work properly. It's about filling the onclick property for the listview with the right code. Can anybody help me out? Thanks in advance!

package com.example.wifitester2;

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

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

   public class Main extends Activity implements OnClickListener
 {      
     WifiManager wifi;       
    ListView lv;
    TextView textStatus;
    Button buttonScan;
    int size = 0;
    List<ScanResult> results;

    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) 
        {
            //Method to connect to the listview item
        }

    });

    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(Main.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));                    
}



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 + "  " + results.get(size).capabilities);

            arraylist.add(item);
            size--;
            adapter.notifyDataSetChanged();                 
        } 
    }
    catch (Exception e)
    { }         
}    
 }
有帮助吗?

解决方案

Try this

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) 
{
    connectToWifi(arg2);
}

private void connectToWifi(int position)
{
    HashMap<String, String> item = arraylist.get(position);

    //get SSID and BSSID from item

    WifiConfiguration wifiConfiguration = new WifiConfiguration(); 
    wifiConfiguration.SSID = itemSSID; 
    wifiConfiguration.allowedKeyManagement.set(KeyMgmt.NONE); 
    wifiConfiguration.BSSID = itemBSSID; //you should also put the BSSID in the map
    wifiConfiguration.hiddenSSID = false; 

    int inetId = wifiManager.addNetwork(wifiConfiguration); 
    wifiManager.enableNetwork(inetId, true);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top