Android .getScanResults()返回相同的对象

Android .getScanResults()返回相同的对象,android,wifimanager,Android,Wifimanager,我遇到一个问题,当我调用“.getScanResults()”时,返回列表中的对象是相同的。我已经对此进行了测试,并记录了结果以进行演示 SSID:#####,BSSID:c0:c1:c0:ab:42:dc,能力:[WEP][ESS],级别:-51,频率:2412,时间戳:2468225251245 SSID:#####,BSSID:c0:c1:c0:ab:42:dc,能力:[WEP][ESS],级别:-51,频率:2412,时间戳:2468225251245 包括时间戳在内,一切都完全相同。我

我遇到一个问题,当我调用“.getScanResults()”时,返回列表中的对象是相同的。我已经对此进行了测试,并记录了结果以进行演示

SSID:#####,BSSID:c0:c1:c0:ab:42:dc,能力:[WEP][ESS],级别:-51,频率:2412,时间戳:2468225251245

SSID:#####,BSSID:c0:c1:c0:ab:42:dc,能力:[WEP][ESS],级别:-51,频率:2412,时间戳:2468225251245

包括时间戳在内,一切都完全相同。我的代码如下

public void checkNetwork(View view) {
    wifi_manager.startScan();

    WifiScanReceiver wifiReciever = new WifiScanReceiver();
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}

class WifiScanReceiver extends BroadcastReceiver {
    public void onReceive(Context c, Intent intent) {
        if (intent.getAction() == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) {

            List<ScanResult> wifi_scan_list = wifi_manager.getScanResults();

            int number_of_access_points = wifi_scan_list.size();

            for(int i = 0; i < number_of_access_points; i++) {
                String data = wifi_scan_list.get(i).toString();

                writeToFile(data + System.getProperty("line.separator"));
            }

            wifi_scan_list.clear();
        }
    }
}
public void checkNetwork(视图){
wifi_manager.startScan();
WifiScanReceiver wifiReciever=新的WifiScanReceiver();
registerReceiver(wifiReciever,新的意向过滤器(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
}
类WifiScanReceiver扩展了BroadcastReceiver{
接收时公共无效(上下文c,意图){
if(intent.getAction()==WifiManager.SCAN\u结果\u可用\u操作){
List wifi_scan_List=wifi_manager.getScanResults();
int number_of_access_points=wifi_scan_list.size();
对于(int i=0;i<访问点的数量;i++){
字符串数据=wifi\u scan\u list.get(i).toString();
writeToFile(data+System.getProperty(“line.separator”);
}
wifi_扫描_列表。清除();
}
}
}
尝试更换

List<ScanResult> wifi_scan_list = wifi_manager.getScanResults();
List wifi\u scan\u List=wifi\u manager.getScanResults();

List raw\u wifi\u scan\u List=wifi\u manager.getScanResults();
设置唯一\u wifi\u扫描\u集=新哈希集(原始\u wifi\u扫描\u列表);
列表wifi\u扫描\u列表=新阵列列表(唯一的\u wifi\u扫描\u集);
此代码:

  • 检索扫描结果的原始列表
  • 并将所有原始扫描结果添加到该集合(从而删除重复项)
  • 仅包含已消除重复的扫描结果

  • 如果不进行测试,我无法100%确定原始列表的顺序将保留在最终列表中;但是,从代码的其余部分来看,这对您的用例似乎并不重要。

    PARS,您可能需要考虑将结果存储在<代码> SET/code >中,以便自动为您修剪重复。@ Stkter感谢您的响应。我尝试将列表更改为集合,但是,类不允许这样做。铸造也不起作用。有什么想法吗?我在下面写了一个更完整的答案;试试看,让我知道进展如何。
    List<ScanResult> raw_wifi_scan_list = wifi_manager.getScanResults();
    Set<ScanResult> unique_wifi_scan_set = new HashSet(raw_wifi_scan_list);
    List<ScanResult> wifi_scan_list = new Arraylist(unique_wifi_scan_set);