2013-04-08 36 views
7

我想知道是否有適用於Java的Wifi API。一些可以連接到Wifi網絡並掃描它們(查找設備)的東西。我似乎無法找到類似的東西。有什麼建議麼?謝謝!Java - Wifi API

P.S. 我知道Android的WifiManager,但我沒有爲Android開發,我正在用JDK 6開發。

+1

我會說「除JNI之外」是一個禁忌。這看起來非常像一個操作系統特定的任務。例如。你必須在Windows上使用WMI,在Loonix上使用[Wireless Tools](http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html),我猜''System/Library /在OS X上的PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport',誰知道其他系統上的內容。 – millimoose 2013-04-08 01:04:12

+1

我不使用JNI,因爲我有Ubuntu和在讀入#1的答案,我似乎遇到的想法,JNI是僅適用於Windows – 0101011 2013-04-08 01:10:30

+0

這是明顯的錯誤。 JNI是Java的一個組成部分,它是Java實際工作所需的主要FFI機制。 (例如,在JDK中實現非本地方法的'native'方法。)也就是說,我認爲[JNA](https://github.com/twall/jna)應該更方便,如果您需要創建自己的綁定。 (實際上可能已經提供了一個綁定到WMI的東西。) – millimoose 2013-04-08 01:13:35

回答

7

無線網卡根據製造商甚至版本而有很大不同,而且大多數操作系統沒有標準化的方式與他們互動。有些電腦甚至沒有配備無線網卡。 Android與其運作良好的原因是因爲Google可以保證每檯安裝了Android的手機都有適當的無線網絡接口。

TL;博士沒有,對不起

+0

您可以連接列表wifi網絡並使用linux命令(如iwlist,wpa_supplicant,ifconfig)連接到它們。因此,如果在他們之上有一個JNI實現,那麼卡的細節將變得無關緊要。 – 2014-03-19 06:29:24

+0

爲什麼python的wifi模塊可以做到呢? – Nabin 2014-08-15 16:36:40

0

你可以利用命令行工具幫助才能使用命令「netsh的WLAN網絡顯示模式= BSSID」可用網絡列表。 請在下面嘗試java方法。

public static ArrayList scanWiFi() { 
     ArrayList<String> networkList = new ArrayList<>(); 
     try { 
      // Execute command 
      String command = "netsh wlan show networks mode=Bssid"; 
      Process p = Runtime.getRuntime().exec(command); 
      try { 
       p.waitFor(); 
      } catch (InterruptedException ex) { 
       ex.printStackTrace(); 
      } 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(p.getInputStream()) 
      ); 
      String line; 
      StringBuilder sb = new StringBuilder(); 
      String ssidArr[]; 

      while ((line = reader.readLine()) != null) { 
       //System.out.println(line); 
       if (line.contains("SSID ") && !line.contains("BSSID ")) { 
        sb.append(line); 
        networkList.add(line.split(":")[1]); 
        //System.out.println("data : " + ssidArr[1]); 
       } 
      } 
      //System.out.println(networkList);    
     } catch (IOException e) { 
     } 
     return networkList; 
    }