Intereting Posts
Android BitmapFactory возвращает нуль в байт-массиве Base64 Сделайте eclipse debug my android PROJECT Получить ссылку на значок значка навигации панели инструментов Разработка Android, Оптимизация организации / нотации исходных файлов? CollapsingToolbarLayout с изображением, фиксированное соотношение сторон RuntimeException с использованием Camera.open () Android – Intent управляет. Старое намерение отправляется повторно, если пользователь открывает приложение из диспетчера задач Задачи градиента области Как протестировать удаленный сервис поддержки Android Android: Как открыть конкретную папку через Intent и показать ее содержимое в браузере файлов? Непредвиденная ошибка при анализе ввода недопустимого файла иерархии uiautomator TestCompile приводит к тому, что студия Android не разрешает зависимости Преимущества компиляции кода C с интерфейсом gcc gcc на C ++ Android – Навигация с вкладками в ориентации ландшафта Библиотека Java с использованием селекторов css для анализа XML

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

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

Solutions Collecting From Web of "Android WiFi соединение программно"

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