2013-04-08 14 views
7

Próbuję dowiedzieć się, czy istnieje interfejs API Wi-Fi dla Javy. Coś, co może łączyć się z sieciami Wi-Fi i skanować je (aby znaleźć urządzenia). Nie mogę znaleźć czegoś takiego. Jakieś sugestie? Dzięki!Java - Wifi API

P.S. Wiem o WifiManager dla Androida, ale nie rozwijam się dla Androida, rozwijam się z JDK 6.

+1

Powiedziałbym, że "oprócz JNI" nie ma. Wydaje się, że jest to zadanie bardzo specyficzne dla systemu operacyjnego. Na przykład. musiałbyś używać WMI w Windows, [Narzędzia bezprzewodowe] (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html) na Loonix, zgaduję '/ System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport' na OS X, kto wie co na innych systemach. – millimoose

+1

Nie używam JNI, ponieważ mam Ubuntu i podczas czytania odpowiedzi Stackoverflow, wydawało mi się, że wpadłem na pomysł, że JNI jest tylko dla Windowsa – 0101011

+0

To jest oczywiście fałszywe. JNI jest integralną częścią Javy, jest to podstawowy mechanizm FFI, który jest niezbędny do rzeczywistej pracy Java. (Na przykład, aby zaimplementować 'natywne' metody w JDK, które nie są wewnętrzne.) Myślę, że [JNA] (https://github.com/twall/jna) powinno być wygodniejsze, jeśli potrzebujesz stworzyć swoje własne wiązania. (I może w rzeczywistości już zapewnia powiązanie z materiałami WMI.) – millimoose

Odpowiedz

7

Karty sieci bezprzewodowej różnią się znacznie w zależności od producenta, a nawet wersji, a większość systemów operacyjnych nie ma znormalizowanego sposobu interakcji z nimi. Niektóre komputery nie mają nawet kart bezprzewodowych. Powodem, dla którego działa tak dobrze z Androidem, jest to, że Google może zagwarantować, że każdy telefon z zainstalowanym Androidem ma odpowiedni interfejs sieci bezprzewodowej.

tl; dr no, przykro

+0

Można łączyć sieci Wi-Fi i łączyć się z nimi za pomocą komend linuksowych takich jak iwlist, wpa_supplicant, ifconfig. W związku z tym, gdyby istniała implementacja JNI, szczegóły karty stały się nieistotne. –

+0

dlaczego moduł wifi pytona może to zrobić? – Nabin

0

można podjąć pomocą narzędzi wiersza poleceń do listy dostępnych sieci za pomocą polecenia "netsh wlan show networks mode = BSSID" dostać. Spróbuj poniżej metody 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; 
    }