2015-04-03 32 views
0

我試圖顯示最強的wifi接入點範圍內的availbe是在我的xml文件中,但我得到了類似的東西「,能力:[WPA-PSK-CCMP] [WPA2-PSK-CCMP] [WPS] [ ESS],等級:-59,頻率:2462,時間戳:1083973302545,距離:?(cm),distancceSD:?(cm)「作爲輸出,如果我改變」textWifi.setText(a.toString());到「textWifi.setText(buf.toString());」那麼我正在獲得所有可用的接入點。Android:選擇可用的最強無線接入點?

如何在「calculateBestAp()」方法中傳遞「buf」以使其工作?

我很感激任何幫助。

\t private void check_wifi_available() { 
 
\t \t WifiManager wifiManager = (WifiManager) this 
 
\t \t \t \t .getSystemService(this.WIFI_SERVICE); 
 

 
\t \t WifiInfo info = wifiManager.getConnectionInfo(); 
 

 
\t \t final List<ScanResult> results = wifiManager.getScanResults(); 
 

 
\t \t if (results != null) { 
 
\t \t \t // StringBuffer buf = new StringBuffer(); 
 
\t \t \t StringBuilder buf = new StringBuilder(); 
 

 
\t \t \t for (int i = 0; i < results.size(); i++) { 
 
\t \t \t \t String ssid = results.get(i).SSID; 
 
\t \t \t \t if (ssid.startsWith("KD")) { 
 

 
\t \t \t \t \t buf.append(ssid + "\n"); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t ScanResult a = calculateBestAP(results); 
 
\t \t \t textWifi.setText(a.toString()); 
 
\t \t } 
 
\t } 
 

 
\t private ScanResult calculateBestAP(final List<ScanResult> results) { 
 
\t \t ScanResult bestSignal = null; 
 
\t \t for (ScanResult result : results) { 
 
\t \t \t if (bestSignal == null 
 
\t \t \t \t \t || WifiManager.compareSignalLevel(bestSignal.level, 
 
\t \t \t \t \t \t \t result.level) < 0) 
 
\t \t \t \t bestSignal = result; 
 
\t \t } 
 
\t \t return bestSignal; 
 
\t }

+0

你可能想澄清的問題,是你綁傳遞BUF到calculateBestAP或textWifi.setText如果是後者,buf.toString()應該罰款。 – faljbour 2015-04-03 23:49:28

+0

我想通過「buf」到「calculateBestAP」來獲得以「KD」開頭的最強wifi接入點。 – 2015-04-04 08:23:09

+0

現在計算BestBestAP工作方式,它是否返回最佳信號 – faljbour 2015-04-04 08:35:52

回答

0

// *除去周圍的StringBuffer的循環邏輯,所有你需要的是這個邏輯,你創建的所有接入點與「KD」 SSID一個新的列表。

 final List<ScanResult> results = wifiManager.getScanResults(); 
    if (results != null) { 

     ArrayList<ScanResult> updatedResults = new ArrayList<ScanResult>(); 
     for (int i = 0; i < results.size(); i++) { 
      String ssid = results.get(i).SSID; 
      if (ssid.startsWith("KD")) { 

       updatedResults.add(results.get(i)); 
      } 
     } 
     if(updatedResults.size()>0) 
     { 
      ScanResult a = calculateBestAP(updatedResults); 
      textWifi.setText(a.toString()); 
     } 
    } 
} 


//* you can modify this method or just leave the original code as is if it works for you 

private ScanResult calculateBestAP(ArrayList<ScanResult> results) { 
     ScanResult bestSignal = (ScanResult)results.get(0); 
     for (int i = 1; i < results.size(); i++) 
     { 
      ScanResult result = (ScanResult)results.get(i); 
      bestSignal = (WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0) ? result : bestSignal; 
     } 
     return bestSignal; 
    } 
+0

我需要的邏輯,挑選以這些charachters「KD」開始的WiFi接入點。因此,我必須將「buf」變量而不是「results」傳遞給「calculateBestAP」方法。 – 2015-04-04 09:03:08

+0

你還需要計算以「KD」開頭的所有wifi接入點的最佳信號嗎? – faljbour 2015-04-04 09:07:45

+0

是的,我需要這對於系統是必要的。 – 2015-04-04 09:10:23