1

I got this code that i want to scan for the networks and then write it all to the listview. But the problem is that the ssid and bssid doesnt show. Everything else shows but not the ssid.

Also what is the best way to update the listview every second so you can see the signal strenghts actual signal?

import java.util.List;

import android.annotation.SuppressLint;
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.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.wifi.R;

public class MainActivity extends Activity {

    WifiManager wifiManager;
    WifiScanReceiver wifiReciever;
    ListView list;
    String wifis[];
    WifiInfo wifiInfo;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.text);
        wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifiReciever = new WifiScanReceiver();
        wifiInfo = wifiManager.getConnectionInfo();
        wifiManager.startScan();
    }



    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 = wifiManager.getScanResults();
            wifis = new String[wifiScanList.size()];
            for (int i = 0; i < wifiScanList.size(); i++) {
                wifis[i] = ((wifiScanList.get(i)).toString());
            }

            list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_list_item_1, wifis));
        }
    }
}
4

1 回答 1

2

您可以使用SSIDandBSSIDScanResultObject 中获取wifiScanList.get(i).SSIDand wifiScanList.get(i).BSSID。然后只需将其附加到从toString().

请参阅此处的文档

首先,将 your 声明ArrayAdapter为实例变量,然后setAdapter()调用onCreate()

ArrayAdapter adapter;
ListView list;
ArrayList<String> wifis;
WifiInfo wifiInfo;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list = (ListView) findViewById(R.id.text);
    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    wifiReciever = new WifiScanReceiver();
    wifiInfo = wifiManager.getConnectionInfo();

    wifis = new ArrayList<String>(); //initialize wifis
    wifis.add("loading...");
    adapter = new ArrayAdapter<String>(getApplicationContext(),
                        android.R.layout.simple_list_item_1, wifis)
    list.setAdapter(adapter);

    wifiManager.startScan(); //make sure this is the last call
}

修改BroadcastReceiver

class WifiScanReceiver extends BroadcastReceiver {
        @SuppressLint("UseValueOf")
        public void onReceive(Context c, Intent intent) {
            List<ScanResult> wifiScanList = wifiManager.getScanResults();
            //wifis = new String[wifiScanList.size()]; //remove this
            wifis.clear(); //add this
            for (int i = 0; i < wifiScanList.size(); i++) {
                String ssid = wifiScanList.get(i).SSID; //Get the SSID
                String bssid =  wifiScanList.get(i).BSSID //Get the BSSID
                //use add here:
                wifis.add( ssid + " " + bssid + " " +((wifiScanList.get(i)).toString()) ); //append to the other data
            }

            adapter.notifyDataSetChanged(); //add this
            wifiManager.startScan(); //start a new scan to update values faster

            //ArrayAdapter adapter = new ArrayAdapter<String>(getApplicationContext(),
             //       android.R.layout.simple_list_item_1, wifis)
            //list.setAdapter(adapter);
        }
    }

这仍然只会更新每个扫描结果。我认为不建议ListView每秒更新一次,您可能需要重新考虑显示 RSSI 级别的方法。您可以单击每个 SSID,并获得一个详细信息视图,TextView其中您可以每秒更新当前 SSID 的 RSSI。

于 2015-04-20T08:13:26.243 回答