2013-04-20 107 views
2

我试图做一个应用程序,可以创建一个可用的wifi接入点列表。这里是我使用的代码的一部分:重复扫描wifi结果中的SSID

x = new BroadcastReceiver() 
     { 
      @Override 
      public void onReceive(Context c, Intent intent) 
      { 
       results = wifi.getScanResults(); 
       size = results.size(); 
       if (results != null) { 
        for (int i=0; i<size; i++){ 
         ScanResult scanresult = wifi.getScanResults().get(i); 
         String ssid = scanresult.SSID; 
         int rssi = scanresult.level; 
         String rssiString = String.valueOf(rssi); 
         textStatus.append(ssid + "," + rssiString); 
         textStatus.append("\n"); 
        } 
        unregisterReceiver(x); //stops the continuous scan 
        textState.setText("Scanning complete!"); 
       } else { 
        unregisterReceiver(x); 
        textState.setText("Nothing is found. Please make sure you are under any wifi coverage"); 
       } 
      } 
     }; 

textStatus和textState都是TextView。 我可以得到这个工作,但有时结果显示重复的SSID,但具有不同的信号水平,在一次扫描。可能有3-4个相同的SSID,但具有不同的信号电平。

SSID和它们有什么不同吗?谁能解释一下?

+0

对于路人:变化'尺寸= results.size(); if(results!= null){'to'if(results!= null){ size = results.size();' – 2013-11-29 02:03:10

回答

3

您是否有几台路由器调制解调器用于同一网络?例如:一个公司有一个大的无线网络,在多个地方安装了多个路由器调制解调器,因此每个房间都有Wifi。如果你这样做了扫描,你将得到很多具有相同SSID但结果点不同的结果,从而得到不同的信号电平。

编辑: 根据沃尔特的评论,如果你的调制解调器是双频带,尽管只有一个接入点,你也可以得到多个结果。下面的代码

+0

什么可能导致这些AP之间的差异?像BSSID或频道或其他东西?我如何得到它们? – randms26 2013-04-20 12:29:34

+0

是的,如果我没有记错,BSSID会有所作为。为了得到这些检查:[ScanResult API](http://developer.android.com/reference/android/net/wifi/ScanResult.html)。换句话说:String bssid = scanresult.BSSID就像你用“ssid”做的那样 – DuKes0mE 2013-04-20 13:00:49

+0

好吧,我会尽快再试一次并确认结果 – randms26 2013-04-20 13:15:33

1

使用以删除重复的SSID具有最高信号强度

public void onReceive(Context c, Intent intent) { 
    ArrayList<ScanResult> mItems = new ArrayList<>(); 
    List<ScanResult> results = wifiManager.getScanResults(); 
    wifiListAdapter = new WifiListAdapter(ConnectToInternetActivity.this, mItems); 
    lv.setAdapter(wifiListAdapter); 
    int size = results.size(); 
    HashMap<String, Integer> signalStrength = new HashMap<String, Integer>(); 
    try { 
     for (int i = 0; i < size; i++) { 
      ScanResult result = results.get(i); 
      if (!result.SSID.isEmpty()) { 
       String key = result.SSID + " " 
         + result.capabilities; 
       if (!signalStrength.containsKey(key)) { 
        signalStrength.put(key, i); 
        mItems.add(result); 
        wifiListAdapter.notifyDataSetChanged(); 
       } else { 
        int position = signalStrength.get(key); 
        ScanResult updateItem = mItems.get(position); 
        if (calculateSignalStength(wifiManager, updateItem.level) > 
          calculateSignalStength(wifiManager, result.level)) { 
         mItems.set(position, updateItem); 
         wifiListAdapter.notifyDataSetChanged(); 
        } 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}