gpt4 book ai didi

java - Wifi 扫描结果给我奇怪的结果

转载 作者:行者123 更新时间:2023-11-30 09:35:04 34 4
gpt4 key购买 nike

我正在尝试保存各种 wifi 扫描的 BSSID 和信号强度。但是,我只关心最近的四次扫描。当它扫描四次时它工作正常但随后奇怪的事情开始发生,并且它就像每次扫描的大小(结果数量)在大约第 6 次扫描后相同。这段代码有什么问题吗?我将结果存储在一组列表中(尽管在处理数据时我只保留了最近的四组)

  public class MainActivity extends Activity {

List<HashSet<Pair>> addresses = new ArrayList<HashSet<Pair>>();
List <ScanResults> results;


...
@Override
public void onCreate(Bundle savedInstanceState) {
//This whole part of the code is run once every ten seconds through use of a timer
mainWifi.startScan();
results = mainWifi.getScanResults();


int entry = addresses.size();

if (entry == 4) { // already has 4 addresses
addresses.remove(0); // remove the
// oldest
// set
entry = 3;
}
addresses.add(entry, new HashSet<Pair>());

for (int i = 0; i < results.size(); i++) {

addresses.get(entry).add(new Pair(results.get(i).BSSID,results.get(i).level));
}

}

最佳答案

已更新

我建议等待 SCAN_RESULTS_AVAILABLE_ACTION WifiManager.startScan() 时广播的 Intent 完成存储您最新的 Wifi 列表。

我还建议使用 for-each 循环并创建对最新列表的引用,而不是使用 get()。在您的 Activity 中:

List<List<Pair<String, Integer>>> addresses = new ArrayList<List<Pair<String, Integer>>>();
List<Pair<String, Integer>> list;
...

public void newWifiResults() {
list = new ArrayList<Pair<String, Integer>>();
if(addresses.size() > 3) {
addresses.remove(0);

results = mainWifi.getScanResults();
for(ScanResult result : results)
list.add(new Pair<String, Integer>(result.BSSID, result.level));

addresses.add(list);
// call mainWifi.startScan() again after a delay
}

您在 BroadcastReceiver 中捕获 SCAN_RESULTS_AVAILABLE_ACTION:

public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// We are only listening for one type of intent, no verifying necessary
newWifiResults();
}
}

如果您也将其作为嵌套/子类放入 Activity 中,onReceive() 将能够轻松调用 newWifiActivity()。

最后,您需要在 Activity 中创建对接收器的引用:

private WifiReceiver wifiReceiver = new WifiReceiver();

在onCreate()或onResume()中,注册接收者:

registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

并在匹配方法(onDestroy() 或 onPause())中取消注册你的接收器:

unregisterReceiver(wifiReceiver);

这比较复杂,但您的代码只会在从 startScan() 返回新结果集时运行。

关于java - Wifi 扫描结果给我奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554864/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com