2010-01-26 10 views
17

In Android 1.5 (anche 1.6)Come e cosa impostato su Android WifiConfiguration.preSharedKey per connettersi alla rete Wi-Fi WPA2 PSK

Come aggiungere un punto di accesso da codice?

Dato Punto di accesso che supporta WPA2. Ecco lo snippet di codice.

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
// This is must be quoted according to the documentation 
// http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID 
wc.SSID = "\"SSIDName\""; 
wc.preSharedKey = "password"; 
wc.hiddenSSID = true; 
wc.status = WifiConfiguration.Status.ENABLED;   
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
int res = wifi.addNetwork(wc); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean b = wifi.enableNetwork(res, true);   
Log.d("WifiPreference", "enableNetwork returned " + b); 

Questo codice non riesce come in LogCat apparire

01-26 16: 44: 13.550: ERRORE/wpa_supplicant (2032): Linea 0: Invalid PSK 'password'.

Sono sicuro che questa è la password e che tutti gli altri parametri sono corretti. Cosa faccio Mi manca?

risposta

43

Il motivo per il mio dolore è qui in this Documentation issue

Mentre documentation here stati

"Pre-Shared Key per l'utilizzo con WPA-PSK. Quando il valore di questa chiave viene letta, l'attuale la chiave non viene restituita, solo un "*" se la chiave ha un valore o altrimenti la stringa nulla. "

E 'corretto, ma molto importante quello che non dice è che aspettava qui etere di 64 byte risultato hash del Linux comando

wpa_passphrase <ssid> [passphrase] 

o la password di Access Point tra virgolette!

Quindi, nel caso in cui PSK di Access Point è "esempio" deve essere passato in java come questo

WifiConfiguration myWiFiConfig = new WifiConfiguration(); 
... 
myWiFiConfig.preSharedKey = "\"example\""; 
... 

O

myWiFiConfig.preSharedKey = "0a0b0f62170ecc5bcf721b6ff170b8b560101b5d56b00a26abec217e0bb4aa1f"; 

Per tutto il resto tu che inciampi su questo nel modo giusto è:

Copia & incollarlo come è e salvare la vostra auto una mezza giornata di dolore che abbiamo già speso su di esso (un ringraziamento speciale a Reflog)

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
wc.SSID = "\"SSIDName\""; 
wc.preSharedKey = "\"password\""; 
wc.hiddenSSID = true; 
wc.status = WifiConfiguration.Status.ENABLED;   
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
int res = wifi.addNetwork(wc); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean b = wifi.enableNetwork(res, true);   
Log.d("WifiPreference", "enableNetwork returned " + b); 
+1

Ciao, sto usando lo stesso codice per creare la configurazione wifi e connettermi al punto di accesso wifi appena creato. ma quando una volta mi collego alla rete wifi e poi dopo aver riavviato il dispositivo la mia configurazione wifi viene ricordata dall'androide, sai in qualche modo che possiamo dire ad Android che ha bisogno di ricordare questa configurazione wifi attraverso le corse. – User7723337

+0

ho provato lo stesso codice ma non ho ottenuto la coonnessione. Quando vedo le impostazioni wifi vedo che per quel particolare punto di accesso lo stato è mostrato come "rememberd protetto con WPA/WPA2 PSK". Quando cerco di coarticolare mannualmente, non richiede la password ma non mi connetto. Si prega di aiutare – png

+1

@A_user Aggiungerlo alla fine: 'wifi.saveConfiguration();' –

2

Si dovrà aggiungere la linea soffietto al fine di:

wifi.saveConfiguration(); 
3

grazie, tutto quello che posso usare il tuo codice conncet al mio wifi wpa psk.

WifiConfiguration wc = new WifiConfiguration(); 
    // This is must be quoted according to the documentation 
    // http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID 
    wc.SSID = "\"zpoint\""; 
    wc.preSharedKey = "\"[email protected]!\""; 
    wc.hiddenSSID = true; 
    wc.status = WifiConfiguration.Status.ENABLED;   
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    int res = wifi.addNetwork(wc); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean b = wifi.enableNetwork(res, true);   
    Log.d("WifiPreference", "enableNetwork returned " + b); 

presto, inserisco la password di errore, ma successivamente correggo la password quindi funziona.

Problemi correlati