2013-04-08 3 views
7

Ich versuche herauszufinden, ob es eine Wifi API für Java gibt. Etwas, das sich mit Wifi-Netzwerken verbinden und diese scannen kann (um Geräte zu finden). Ich kann so etwas nicht finden. Irgendwelche Vorschläge? Vielen Dank!Java - Wifi API

P.S. Ich weiß über den WifiManager für Android, aber ich entwickle nicht für Android, ich entwickle mit JDK 6.

+1

Ich würde sagen, "neben JNI" ist ein No-Go. Dies scheint sehr nach einer zutiefst OS-spezifischen Aufgabe zu sein. Z.B. Sie müssten WMI unter Windows, [Wireless Tools] (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html) auf Loonix verwenden, ich vermute '/ System/Library/PrivateFrameworks/Apple80211.framework/Versionen/Current/Resources/airport' auf OS X, wer weiß was auf anderen Systemen. – millimoose

+1

Ich benutze JNI nicht, da ich Ubuntu habe, und beim Lesen einer Stackoverflow-Antwort schien ich auf die Idee zu kommen, dass JNI nur für Windows ist. – 0101011

+0

Das ist offensichtlich falsch. JNI ist ein integraler Bestandteil von Java, es ist der primäre FFI-Mechanismus, der für Java tatsächlich benötigt wird. (Zum Beispiel, um 'native' Methoden im JDK zu implementieren, die keine intrinsischen sind.) Das heißt, ich denke, [JNA] (https://github.com/twall/jna) sollte bequemer sein, wenn Sie Ihre erstellen müssen eigene Bindungen. (Und möglicherweise bereits eine Bindung an die WMI-Sachen.) – millimoose

Antwort

7

Wireless-Netzwerkkarten unterscheiden sich stark je nach Hersteller und sogar Version, und die meisten Betriebssysteme haben keine standardisierte Art und Weise mit ihnen zu interagieren. Einige Computer verfügen nicht einmal über WLAN-Karten. Der Grund, warum es mit Android so gut funktioniert, ist, dass Google garantieren kann, dass jedes Telefon, auf dem Android installiert ist, über eine geeignete drahtlose Netzwerkschnittstelle verfügt.

tl; dr nein, sorry

+0

Sie können Listen Wifi-Netzwerke verbinden und mit ihnen mit Linux-Befehlen wie iwlist, wpa_supplicant, ifconfig verbinden. Wenn sich eine JNI-Implementierung auf ihnen befindet, werden die Kartendetails daher irrelevant. –

+0

Warum kann WiFi-Modul von Python es dann tun? – Nabin

0

Sie Hilfe von Kommandozeilen-Tools nehmen Liste der verfügbaren Netzwerke erhalten mit dem Befehl "netsh wlan show Netzwerke mode = BSSID". Versuchen Sie unter Java-Methode.

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; 
    }