0

WifiManagerを使用して特定のSSIDの存在をテストし、特定のWPAパスワードを確認していますが、奇妙な結果が得られています。

コードは次のようになります。

WifiConfiguration wc = new WifiConfiguration();

// init ssid and password as Strings ...
wc.SSID = "\"" + ssid + "\"";
wc2.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);
boolean b = wifi.enableNetwork(res, true);

奇妙な部分は、SSIDのあるwifiネットワークがオンライン(?!)でない場合でも、enableNetwork()がtrueを返すことです。ただし、ターゲットWifiネットワークが存在し、パスワードが正しい場合、コードは正常に接続を確立することに注意してください。

Androidのドキュメントには、enableNetwork()は「操作が成功した場合はtrueを返す」と記載されています。私の質問は次のとおりです。

1)ネットワークが存在しない場合、どのようにしてネットワークを有効にすることができますか?

2)WifiConfigurationパラメーターwcを誤って初期化しましたか?

3)これはWifiネットワークへの接続を確立/テストする正しい方法ですか?

4

1 に答える 1

3

1) ネットワークが存在しない場合、どのようにしてネットワークを有効にできますか?

Android のドキュメントには、「操作が成功した場合、enableNetwork() は true を返す」と記載されています。

実際には、有効化操作が正常に開始され、クラッシュしていないことを意味します... Wi-Fi インスタンスが Wi-Fi サプリカントにリンクされていない場合、これは false を返す可能性があります。

2) WifiConfiguration パラメータ wc を間違って初期化しましたか?

よくわかりませんが、問題ないようです。

3) これは、Wifi ネットワークへの接続を作成/テストする正しい方法ですか?

ネットワークを有効にする前に、メソッドを使用してネットワークが実際に使用可能かどうかを確認する必要がありますstartScan()。(コールバックで SSID のリストを取得します)。

また、BroadcastReceiver を使用して Intent アクションから結果を取得する必要NETWORK_STATE_CHANGED_ACTIONがあります。ここで、アクセス ポイントへの接続が成功したかどうかを確認できます。

于 2012-07-08T19:47:13.750 に答える