如何扫描wifi网络并在列表视图中列出?

时间:2013-08-08 17:37:53

标签: java android android-activity wifi network-scan

我需要扫描可用的wifi网络并将其列在可点击的列表视图中。使用我在网上找到的一些教程,并在这里由meny人重复,我设法完成了这段代码:

public class Wifi_list extends Activity implements OnClickListener
 {      
    WifiManager wifi;       
    ListView lv;
    TextView textStatus;
    Button buttonScan;
    Switch enable;
    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.wifi_list);
        buttonScan = (Button) findViewById(R.id.button1);
        buttonScan.setOnClickListener(this);
        lv = (ListView)findViewById(R.id.listView1);

        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        enable.setChecked(wifi.isWifiEnabled());
        enable.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton compoundbutton, boolean flag) {
                wifi.setWifiEnabled(flag);
                if(flag){
                    arraylist.clear();
                    lv.setVisibility(View.VISIBLE);
                    buttonScan.setEnabled(true);
                    wifi.startScan();
                }else{
                    lv.setVisibility(View.INVISIBLE);
                    buttonScan.setEnabled(false);
                }
            }
        });
        this.adapter = new SimpleAdapter(Wifi_list.this, arraylist, R.layout.wifi_item, new String[] { ITEM_KEY }, new int[] { R.id.list_value });
        lv.setAdapter(this.adapter);
        lv.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                int a = lv.getSelectedItemPosition();

            }
        });

        registerReceiver(new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context c, Intent intent) 
            {
               results = wifi.getScanResults();
               size = results.size();
               for(int i=size-1;i>=0;i--){
                   HashMap<String, String> item = new HashMap<String, String>();                       
                   item.put(ITEM_KEY, results.get(i).SSID);
                   arraylist.add(item);
               }
               if(size>0)
                   adapter.notifyDataSetChanged();
            }
        }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));                    
    }

    public void onClick(View view) 
    {
        arraylist.clear();          
        wifi.startScan();
        Toast.makeText(this, "Scanning....", Toast.LENGTH_SHORT).show();

    }    
}

但是我找不到R.layout.wifi_item和R.id.list_value是什么,因为我得到了错误。有人可以帮我解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:2)

  

但我无法找到神的名字是R.layout.wifi_item   和R.id.list_value,因为我得到错误。有人可以帮助我   搞清楚这个?感谢。

您命名的文件是布局文件,在.xml

中定义

它们可以包含UI组件,例如您要用于显示WiFi网络的ListView。

在您的示例中,您有2个布局文件。 一个是R.layout.wifi_list,它包含一个按钮(button1)和一个ListView(listView1)。 另一个是R.layout.wifi_item,一个自定义布局文件,表示ListView中一个条目的布局。

显示包含WiFi网络名称的简单字符串,您可以使用Android预定义布局“android.R.layout.simple_list_item_1”作为List-Adapter。