web-dev-qa-db-ja.com

WPA2 PSK WiFiネットワークに接続するためのAndroid WifiConfiguration.preSharedKeyの設定方法と設定内容

Android 1.5(1.6でも))

コードからアクセスポイントを追加する方法

WPA2をサポートする特定のアクセスポイント。これが私のコードスニペットです。

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

LogCatのように、このコードは失敗します

01-26 16:44:13.550:ERROR/wpa_supplicant(2032):Line 0:Invalid PSK 'password'。

これがパスワードであり、残りのすべてのパラメーターが正しいことを確信しています。私は何を見逃しますか?

19
Boris Daich

私の悲しみの理由はこちら このドキュメントの問題

一方で ドキュメントはこちら 状態

「WPA-PSKで使用する事前共有キー。このキーの値が読み取られても、実際のキーは返されません。キーに値がある場合は「*」、それ以外の場合はnull文字列が返されます。」

正しいですが、非常に重要です言わないでくださいここでは、Linuxコマンドの64バイトのハッシュ結果が期待されています。

wpa_passphrase <ssid> [passphrase] 

またはアクセスポイントのパスワードIN DOUBLE QUOTES!

そのため、アクセスポイントのPSKが "example"の場合は、次のようにJavaで渡す必要があります

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

OR

myWiFiConfig.preSharedKey = "0a0b0f62170ecc5bcf721b6ff170b8b560101b5d56b00a26abec217e0bb4aa1f";

これに遭遇する残りのすべての人にとって正しい方法は次のとおりです。

そのままコピー&ペーストして、すでに費やしていた半日の痛みを保存してください(特別な感謝 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 );
45
Boris Daich

おかげで、私はあなたのコードを私のwpa psk wifiに接続できます。

   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  = "\"sipisP@ssw0rd!\"";
    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 );

早い段階でエラーパスワードを入力しましたが、後でパスワードを修正すると機能します。

5
poe

以下の行を追加する必要があります。

wifi.saveConfiguration();
3
sl96314