Android подключается к WiFi без участия человека

Мне интересно, есть ли фрагменты кода, которые можно использовать для подключения устройства Android к сети WiFi. Сеть должна быть либо открытой, либо зашифрованной WEP/WPA и видимой для этого устройства. Обычно мы используем графический интерфейс для ввода паролей WiFi и нажатия кнопки подключения. Я хочу хранить пароль в определенном месте и использовать его для беспрепятственного подключения к сети без участия человека. Это возможно? Большое спасибо.


person Felix Chan    schedule 26.05.2011    source источник


Ответы (4)


Спасибо ребята. С вашей помощью я теперь могу без проблем подключаться к сети с шифрованием WPA/PSK. Вот мой фрагмент кода:

        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        // setup a wifi configuration
        WifiConfiguration wc = new WifiConfiguration();
        wc.SSID = "\"YOUR_SSID\"";
        wc.preSharedKey = "\"YOUR_PASSWORD\"";
        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);
        // connect to and enable the connection
        int netId = wifiManager.addNetwork(wc);
        wifiManager.enableNetwork(netId, true);
        wifiManager.setWifiEnabled(true);

Трюки таковы:

  • Строка SSID должна быть окружена ", что обозначается \"
  • Метод addNetwork() ОТКЛЮЧАЕТ добавленную сеть по умолчанию, поэтому вы должны включить ее с помощью метода enableNetwork().
person Felix Chan    schedule 27.05.2011
comment
Удивительное решение! есть идеи, как узнать, неверный ли введенный пароль? я пытался добавить try catch , но он не работает, пароль сохраняется в сети Wi-Fi, и единственный способ снова подключиться к нему — забыть сеть или изменить пароль - person Zame; 13.03.2016

Чтобы заставить работать пример кода OP, мне пришлось добавить еще одну строку:

wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

Без этой линии он просто не подключится к сети. Конфигурация принята и добавлена, но попытки подключения не предпринимаются. На самом деле я получил следующее сообщение в окне logcat:

Event [WPA: Failed to select WPA/RSN] android

что привело меня к окончательному решению, выяснив, почему это не сработало для меня.

person Wouter    schedule 03.07.2011

WifiManager. Вы пробовали искать здесь. addNetwork() похоже, что он может делать то, что вы хотите. Все, что вам нужно сделать, это поместить информацию в класс WifiConfiguration. а затем добавьте сеть, затем включите это соединение. Документация вся есть.

person Nicholas    schedule 26.05.2011

Ознакомьтесь с документацией для "WifiManager"

Его можно использовать для включения Wi-Fi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);

И его можно использовать для многих других вещей.

Изменить: не забудьте обновить свои разрешения при мониторинге и изменении состояния Wi-Fi, например:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

и т.д...

person Evan    schedule 26.05.2011