2013-04-08 19 views
7

Sto cercando di scoprire se esiste un'API WiFi per Java. Qualcosa che possa connettersi alle reti Wifi e scansionarle (per trovare i dispositivi). Non riesco a trovare qualcosa del genere. Eventuali suggerimenti? Grazie!Java - Wifi API

P.S. Conosco il WifiManager per Android, ma non lo sviluppo per Android, sto sviluppando con JDK 6.

+1

Direi "oltre a JNI" è un no-go. Questo mi sembra un compito molto specifico per OS. Per esempio. dovresti usare WMI su Windows, [Wireless Tools] (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html) su Loonix, sto cercando '/ System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport' su OS X, chissà cosa su altri sistemi. – millimoose

+1

Non sto usando JNI, dal momento che ho Ubuntu, e mentre leggevo una risposta Stackoverflow, mi sembrava di imbattersi nell'idea che JNI fosse solo per Windows – 0101011

+0

Questo è palesemente falso. JNI è parte integrante di Java, è il meccanismo FFI primario necessario per far funzionare Java. (Ad esempio, per implementare metodi 'nativi' nel JDK che non sono intrinseci.) Detto questo, penso che [JNA] (https://github.com/twall/jna) dovrebbe essere più conveniente se devi creare il tuo proprie associazioni. (E potrebbe di fatto già fornire un collegamento alle cose WMI.) – millimoose

risposta

7

Le schede di rete wireless differiscono notevolmente a seconda del produttore e della versione anche e la maggior parte dei sistemi operativi non ha un modo standardizzato di interagire con loro. Alcuni computer non vengono nemmeno con le schede wireless. La ragione per cui funziona così bene con Android è perché Google può garantire che ogni telefono con Android installato abbia un'interfaccia di rete wireless adeguata.

tl; dr no, scusate

+0

È possibile collegare le reti wifi dell'elenco e collegarsi a esse con comandi di linux come iwlist, wpa_supplicant, ifconfig. Pertanto, se ci fosse un'implementazione JNI in cima a loro, i dettagli delle carte diventano irrilevanti. –

+0

perché il modulo wifi di python può farlo allora? – Nabin

0

Si può prendere l'aiuto di strumenti a linea di comando per ottenere l'elenco delle reti disponibili tramite il comando "netsh wlan show reti mode = bssid". Prova sotto il metodo 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; 
    }