Intereting Posts
Удаление пробелов из строки Перечисление папок и файлов с помощью Google Drive SDK V2 Прочитать ответ на сервер с помощью OkHttp Съемный способ хранения (внешний) sdcard производителями Android – не может захватывать нажатие клавиши «backspace / delete» в мягкой форме. клавиатура Добавление PrimaryKey в область с тоннами дублированных данных Неравномерное количество образцов между акселерометром, гироскопом и магнитометром на Android Должно ли название основной деятельности быть .MainActivity? Как уменьшить размер файла изображения перед загрузкой на сервер Выбор стиля / темы программно во время выполнения Как добавить TextView над FloatingActionButton в Android Загрузка фотографий из приложения Android в Google Cloud Storage / App Engine – незаконный символ '_' Как разрезать и перевернуть вид камеры? Как получить количество файлов в определенной папке в активах? Что вызывает отмененные сетевые запросы в Android Chrome

Android WiFi соединение программно

Вы знаете, как установить соединение Wi-Fi с паролем в моем приложении для Android?

Передайте 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"; } 

Не забудьте добавить необходимое разрешение в файл манифеста.

100% работает.

Таким образом, вы можете подключиться к вашему конкретному Wif Этот код для MainActivity.java

////////////// >>> Wifi Connection (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(); 

Кроме того, не забудьте включить этот код в свой AndroidManifest.xml

 <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" /> 

Код, размещенный от AnujAroshA, здесь очень полезен. Но есть еще один недостающий случай:

  .. } else if (securityMode.equalsIgnoreCase("PSK")) { // PSK code .. 

В противном случае код PSK также выполняется для сетей WEP и OPEN.

И, по моему мнению, стиль кода не оптимален. Нет необходимости создавать две строки networkSSID и networkPass. Вы можете просто использовать ssid или passkey.

Предложение: Разделить создание wifi-конфигурации и метода подключения.

(1) Способ создания WifiConfiguration:

 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"; }