问题
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));
}
}
}
回答1:
You can get the SSID
and BSSID
from the ScanResult
Object using wifiScanList.get(i).SSID
and wifiScanList.get(i).BSSID
. Then just append it to the other data returned from toString()
.
See Documentation Here.
First, declare your ArrayAdapter
as an instance variable, and call setAdapter()
in 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
}
Modified 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);
}
}
This will still only update on each scan result. I don't think it's recommended to update a ListView
every second, you may want to re-think your approach for showing RSSI levels. You could have an on-click for each SSID, and have a details view with a TextView
where you update the RSSI every second for the current SSID.
来源:https://stackoverflow.com/questions/29742249/android-wifi-cant-get-the-ssid-and-bssid-from-scanresult