あなたのAndroidアプリケーションでパスワードを送信することで無線LAN接続を確立する方法はありますか?AndroidのWiFi接続をプログラム的に
9
A
答えて
30
SSIDとそのパスワードを以下の方法に渡します。
public void connectToAP(String ssid, String passkey) {
Log.i(TAG, "* connectToAP");
WifiConfiguration wifiConfiguration = new WifiConfiguration();
String networkSSID = ssid;
String networkPass = passkey;
Log.d(TAG, "# password " + networkPass);
for (ScanResult result : scanResultList) {
if (result.SSID.equals(networkSSID)) {
String securityMode = getScanResultSecurity(result);
if (securityMode.equalsIgnoreCase("OPEN")) {
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "# add Network returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
} else if (securityMode.equalsIgnoreCase("WEP")) {
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.wepKeys[0] = "\"" + networkPass + "\"";
wifiConfiguration.wepTxKeyIndex = 0;
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "### 1 ### add Network returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
}
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.preSharedKey = "\"" + networkPass + "\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "### 2 ### add Network returned " + res);
wifiManager.enableNetwork(res, true);
boolean changeHappen = wifiManager.saveConfiguration();
if(res != -1 && changeHappen){
Log.d(TAG, "### Change happen");
AppStaticVar.connectedSsidName = networkSSID;
}else{
Log.d(TAG, "*** Change NOT happen");
}
wifiManager.setWifiEnabled(true);
}
}
}
public String getScanResultSecurity(ScanResult scanResult) {
Log.i(TAG, "* getScanResultSecurity");
final String cap = scanResult.capabilities;
final String[] securityModes = { "WEP", "PSK", "EAP" };
for (int i = securityModes.length - 1; i >= 0; i--) {
if (cap.contains(securityModes[i])) {
return securityModes[i];
}
}
return "OPEN";
}
マニフェストファイルに必要な権限を追加することを忘れないでください。
2
AnujAroshAから投稿されたコードは本当に役に立ちます。しかし、他の場合がありません:
..
} else if (securityMode.equalsIgnoreCase("PSK")) {
// PSK code
..
そうでなければ、PSKコードはWEPとOPENネットワークに対しても実行されます。
私の意見では、コードスタイルは最適ではありません。 2つのストリングnetworkSSIDとnetworkPassを作成する必要はありません。単にssidまたはpasskeyを使うことができます。
提案:Wi-Fi設定の作成と接続方法を分割します。
WifiConfigurationを作成する(1)方法:
private WifiConfiguration createAPConfiguration(String networkSSID, String networkPasskey, String securityMode) {
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
if (securityMode.equalsIgnoreCase("OPEN")) {
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else if (securityMode.equalsIgnoreCase("WEP")) {
wifiConfiguration.wepKeys[0] = "\"" + networkPasskey + "\"";
wifiConfiguration.wepTxKeyIndex = 0;
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
} else if (securityMode.equalsIgnoreCase("PSK")) {
wifiConfiguration.preSharedKey = "\"" + networkPasskey + "\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
} else {
Log.i(TAG, "# Unsupported security mode: "+securityMode);
return null;
}
return wifiConfiguration;
}
(2)AP方法は、接続:
public int connectToAP(String networkSSID, String networkPasskey) {
for (ScanResult result : scanResultList) {
if (result.SSID.equals(networkSSID)) {
String securityMode = getScanResultSecurity(result);
WifiConfiguration wifiConfiguration = createAPConfiguration(networkSSID, networkPasskey, securityMode);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "# addNetwork returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
boolean changeHappen = wifiManager.saveConfiguration();
if (res != -1 && changeHappen) {
Log.d(TAG, "# Change happen");
connectedSsidName = networkSSID;
} else {
Log.d(TAG, "# Change NOT happen");
}
return res;
}
}
return -1;
}
を(3)スキャン方法100%投稿AnujAroshAとして。
public String getScanResultSecurity(ScanResult scanResult) {
final String cap = scanResult.capabilities;
final String[] securityModes = { "WEP", "PSK", "EAP" };
for (int i = securityModes.length - 1; i >= 0; i--) {
if (cap.contains(securityModes[i])) {
return securityModes[i];
}
}
return "OPEN";
}
4
100%Works。あなたが特定のWIF にMainActivity.java
//////////////のためのこのコードを接続することができます。この方法により、
>>> WiFi接続(WP2)< < < ////////////////
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", "Wifi name");
wifiConfig.preSharedKey = String.format("\"%s\"", "Wifi password");
WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE);
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
そしてまた、このコードはコンパイルされません
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
関連する問題
- 1. 接続WiFi p2p android、WIFI_P2P_CONNECTION_CHANGED_ACTION
- 2. Android P2P接続(Wifi経由)
- 3. AndroidテストWi-Fi接続をプログラム的に
- 4. Android:スリープモード中にWifiに一時的に接続する
- 5. Android 5および6でWiFiネットワークに自動的に接続
- 6. AndroidがEAP-AKA WiFiに接続する
- 7. WiFi接続が
- 8. アンドロイドWIFI接続
- 9. WiFi接続名
- 10. AndroidプログラムはWifi経由でリモートソケットに接続しますが、モバイルデータ経由では接続しません。
- 11. QTアプリケーション--- WIFI接続
- 12. WiFi P2P接続ユーザーインタラクションバイパス?
- 13. WiFiに接続する
- 14. QMLからWiFiに接続
- 15. vb.net WIFIネットワークに接続
- 16. libconnman-qt wifiに接続
- 17. AWS IOTボタン:Wifiに接続
- 18. Androidのスナックバーを使用してデバイスをWiFiに接続する
- 19. アンドロイド経由のWiFi接続
- 20. wifi接続の不連続性の後にPythonプログラムが終了する
- 21. AndroidでWIFI自動接続を無効にする方法
- 22. インターネットにWiFi、ルーター、プロキシ経由でAndroidアプリを接続する
- 23. Android WearにWiFiを接続してください
- 24. ローカルのwifi経由でPc/Androidに接続できません
- 25. Windowsを強制的にWIFI接続を使用する電話
- 26. 既存のネットワークにプログラム的に接続
- 27. Android Wifi P2p(Wifi Direct)接続は複数のアクティビティで機能しますか?
- 28. wifiを使って2台のAndroidデバイスを接続
- 29. wifi P2Pをネットワークに接続せずに
- 30. NodeMCU WiFi自動接続
あなたのAndroidManifest.xmlにこのコードを含めることを忘れないでくださいwh変数scanResultListとwifiManagerが定義されていますか? – yoprogramo
WifiManagerのwifiManager(Context.getSystemService(Context.WIFI_SERVICE))を取得し、その呼び出し(wifiMananger.getScanResults())を実行してscanResultList変数を取得する必要があります。上記のコードでは、すでに使用可能なネットワークのリストがあることを前提としています。 – wblaschko
あなたのコードにはAppStaticVarとは何ですか? –