2014-02-22 39 views
0

看到我的代碼如下。這會產生一個列表視圖,其中包含所有可用的wificonnections。 我的目標太連接到列出的其中一個可用連接。 我已經嘗試了幾件事,但它不能正常工作。 這是關於用正確的代碼填充listview的onclick屬性。 有人可以幫我嗎?提前致謝!從列表視圖連接到網絡

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) 
    { }   
}  
} 

回答

0

試試這個

@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); 
} 
+0

太好了!感謝您的輸入。只有一個問題,itemSSID和itemBSSID是紅色下劃線的,因爲它們沒有被定義...你能幫助我嗎?在此先感謝 – user3341275

+0

嗯,我不知道你背後的邏輯HashMap。您需要獲取包含您以某種方式生成的ITEM_KEY字符串對應的SSID的字符串。爲什麼你沒有在HashMap中插入一個ScanResult對象作爲ITEM_KEY的值?或者,如果從結果列表中迭代地插入列表中的元素,則可以使用位置no從結果列表列表中獲取它。 – AndyFaizan

+0

是的,你最後的選擇是我現在正在做的。謝謝你的幫助! – user3341275