Я хочу разработать приложение, которое показывает список доступных сетей Wi-Fi и подключается к любой сети, выбранной пользователем.
Я реализовал часть, показывающую результаты сканирования. Теперь я хочу подключиться к определенной сети, выбранной пользователем из списка результатов сканирования.
Как мне это сделать?
android
android-wifi
wifimanager
Викрам Гупта
источник
источник
Ответы:
Вам нужно создать
WifiConfiguration
экземпляр следующим образом:Затем для сети WEP вам нужно сделать это:
Для сети WPA вам нужно добавить фразу-пароль следующим образом:
Для открытой сети вам нужно сделать это:
Затем вам нужно добавить его в настройки Android-менеджера Wi-Fi:
И, наконец, вам может потребоваться включить его, чтобы Android подключился к нему:
UPD: В случае WEP, если ваш пароль в шестнадцатеричном виде, вам не нужно заключать его в кавычки.
источник
Более ранний ответ работает , но решение на самом деле может быть проще. Циклический просмотр списка настроенных сетей не требуется, поскольку вы получаете идентификатор сети при добавлении сети через WifiManager.
Таким образом, полное упрощенное решение будет выглядеть примерно так:
источник
CHANGE_WIFI_STATE
разрешение необходимо.См. Https://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities
Существует три типа сетей WIFI.
Во-первых, создайте экземпляр объекта WifiConfiguration и введите SSID сети (обратите внимание, что он должен быть заключен в двойные кавычки), установите начальное состояние как отключенное и укажите приоритет сети (числа около 40, кажется, работают хорошо).
Теперь о более сложной части: нам нужно заполнить несколько членов WifiConfiguration, чтобы указать режим безопасности сети. Для открытых сетей.
Для сетей, использующих WEP; обратите внимание, что ключ WEP также заключен в двойные кавычки.
Для сетей, использующих WPA и WPA2, мы можем установить одинаковые значения для обоих.
Наконец, мы можем добавить сеть в известный список WifiManager
источник
Кредит @ raji-ramamoorthi & @kenota
Решение, которое сработало для меня, - это сочетание перечисленных выше участников в этой теме.
Чтобы попасть
ScanResult
сюда, это процесс.Обратите внимание на
unregister
этоonPause
иonStop
живи этимunregisterReceiver(broadcastReceiver);
источник
Если ваше устройство знает настройки Wi-Fi (уже сохранены), мы можем обойти ракетостроение. Просто прокрутите конфиги и проверьте, совпадает ли SSID. Если так, подключитесь и вернитесь .
Установить разрешения:
Connect:
источник
Я сломал голову, чтобы понять, почему ваши ответы на WPA / WPA2 не работают ... после нескольких часов попыток я нашел то, что вам не хватает:
ТРЕБУЕТСЯ для сетей WPA !!!!
Теперь это работает :)
источник
Это действие, которое вы можете создать подклассом для принудительного подключения к определенному Wi-Fi: https://github.com/zoltanersek/android-wifi-activity/blob/master/app/src/main/java/com/zoltanersek/androidwifiactivity/ WifiActivity.java
Вам нужно будет создать подкласс этого действия и реализовать его методы:
источник
На уровне API 29
WifiManager.enableNetwork()
метод устарел . Согласно документации Android API (проверьте здесь ):Начиная с уровня API 29, для подключения к сети Wi-Fi вам необходимо будет использовать
WifiNetworkSpecifier
. Пример кода можно найти по адресу https://developer.android.com/reference/android/net/wifi/WifiNetworkSpecifier.Builder.html#build ().источник
Я также пытался подключиться к сети. Ни одно из предложенных выше решений не работает для hugerock t70. Функция wifiManager.disconnect (); не отключается от текущей сети. И поэтому не может переподключиться к указанной сети. Я изменил приведенный выше код. Для меня код bolow работает отлично:
источник
UID nnnnn does not have permission to update configuration xxxx. MD_START_CONNECT but no requests and connected, but app does not have sufficient permissions, bailing.
Попробуйте этот метод. Это очень просто:
источник