- Android: Как включить / отключить Wifi или подключение к интернету программно
- 6 ответов:
- Как подключиться к определенной сети Wi-Fi в Android программно?
- 10 ответов:
- Прикладное программирование с нуля.
- AVR, STM, Android, IoT. Встраиваемые системы.
- Выбор и подключение к сети Wi-Fi на Android. Шаг №88
- Выбор и подключение к сети Wi-Fi на Android. Шаг №88 : 2 комментария
Android: Как включить / отключить Wifi или подключение к интернету программно
С помощью класса Connectivity Manager мы можем получить доступ к Wi-Fi или сети Интернет:
здесь 0 и 1 соответственно относится к мобильной и wifi связи
если мое устройство Android подключено к обоим, можно ли переключаться между любой сетью или отключить любую сеть? Как с помощью функции:
6 ответов:
Я знаю о включении или отключении wifi:
где статус может быть true или false в соответствии с требованием.
Edit:
вам также нужны следующие разрешения в файле манифеста:
Отключить WiFi:
Примечание.: Чтобы получить доступ с состоянием WiFi, мы должны добавить следующие разрешения внутри AndroidManifest.xml-файл:
для включения отключения Wifi используйте WifiManager класс, чтобы получить системные (android устройства) услуги для Wifi :
теперь объект wifi на WifiManager класс используется для получения статуса wifi:
и самое главное не забудьте дать следующее разрешение в файле манифеста Android:
чтобы получить подробную информацию и полный пример кода проекта для включения / выключения Wifi на android посетите мой сайт ссылка.
добавьте это разрешение в свой манифест и используйте приведенный выше код для изменения состояния WiFi:
Я не мог получить доступ к контексту объекта напрямую.
Мое решение заключается в следующем:
также мне пришлось изменить некоторые записи, например. WIFI_SERVICE против WifiService.
Источник
Как подключиться к определенной сети Wi-Fi в Android программно?
Я хочу создать приложение, которое показывает список доступных сетей Wi-Fi и подключается к любой сети, выбранной пользователем.
я реализовал часть, показывающую результаты сканирования. Теперь я хочу подключиться к определенной сети, выбранной пользователем из списка результатов сканирования.
Как мне это сделать?
10 ответов:
затем, для WEP сети вам нужно сделать это:
для сети WPA вам нужно добавить парольную фразу следующим образом:
для открытой сети вам нужно сделать это:
затем вам нужно добавить его в Настройки Android wifi manager:
и, наконец, вам может потребоваться включить его, поэтому Android подключается к это:
UPD: в случае WEP, если ваш пароль находится в hex, вам не нужно окружать его кавычками.
на более ранний ответ работает, но решение на самом деле может быть проще. Цикл по списку настроенных сетей не требуется, так как вы получаете идентификатор сети при добавлении сети через WifiManager.
Итак полное, упрощенное решение будет выглядеть примерно так:
перед подключением Wi-Fi сети вам нужно проверить тип безопасности Wi-Fi сети ScanResult класс имеет возможности. Это поле дает вам тип сети
здесь три типа сетей WIFI.
сначала создайте экземпляр объекта WifiConfiguration и заполните SSID сети (обратите внимание, что он должен быть заключен в двойные кавычки), установить начальное состояние отключено и указать приоритет сети (номера вокруг 40, похоже, работают хорошо).
теперь более сложная часть: нам нужно заполнить несколько членов WifiConfiguration, чтобы указать режим безопасности сети. Для открытых сетей.
для сетей, использующих WEP; обратите внимание, что ключ WEP также заключен в двойные кавычки.
для сетей используя WPA и WPA2, мы можем установите одинаковые значения для любого из них.
наконец, мы можем добавить сеть в известный список WifiManager
решение, которое сработало для меня, — это комбинация вышеуказанных участников в этой теме.
и ScanResult здесь процесс.
вам нужно будет подкласс этого действия и реализовать его методы:
Если ваше устройство знает конфигурации Wifi (уже сохраненные), мы можем обойти ракетостроение. Просто пройдите через конфигурации и проверьте, соответствует ли SSID. Если да, то подключитесь и возвращение.
Я сломал голову, чтобы понять, почему ваши ответы на WPA / WPA2 не работают. после часа попыток, я нашел то, что вам не хватает:
требуется для информационной безопасности.
попробовать этот метод. Это очень просто:
Я также пытался подключиться к сети. Ни одно из предложенных выше решений не работает для hugerock t70. WiFiManager, с помощью функции.disconnect (); не отключается от текущей сети. И поэтому не удается повторно подключиться к указанной сети. Я изменил приведенный выше код. Для меня код bolow работает отлично:
Источник
Прикладное программирование с нуля.
AVR, STM, Android, IoT. Встраиваемые системы.
Выбор и подключение к сети Wi-Fi на Android. Шаг №88
Всем привет. Давайте вспомним, что в прошлой статье мы с Вами остановились на поиске сетей Wi-Fi и переносе их SSID-ов в кликабельный список. В этой записи рассмотрим один из способов подключения к необходимой сети из нашего приложения SmartHouse. На самом деле задача оказалась довольно непростой, начиная с версии Android 5.
Для начала добавим проверку включения модуля wi-fi, если выключен — включаем.
Ниже скриншот, где видно что программа подключается непосредственно к модулю. Выводим всплывающее сообщение.
Перед следующим шагом необходимо оговорить защищенность сети. Методы защиты WPA, WEP пока не будем рассматривать. Для начала мы с Вами используем открытую сеть, без логина и пароля. Попробуем из конфигурации сетей Wi-Fi подключится к ESP8266. И здесь на скриншоте, ниже, мы видим сообщение «У доступі до мережі відмовлено».
Дело в том, что если в сети отсутствует интернет – соединение, то из соображений политики безопасности мы его не получим. Естественно приложение не откроет сокет. В более ранних версиях выводилось сообщение о том, что «подключенная сеть Wi-Fi не имеет доступ к интернету». Чтобы сокет открылся, пользователь должен зайти в это оповещение и подтвердить, что он хочет подключиться именно к этой, «безинтернетной» сети. В версиях выше 5-ой, и уж точно 6.0, на которой опробовано приложение, данных оповещений нет. Во вторых наша задача написать код, который подключается к выбранной сети и минимизирует движения со стороны пользователя. Данные новшества введены ради безопасности, чтобы без ведома пользователя приложения не коннектились к непонятным сетям. Один из вариантов решения, точнее разрешения – это прописание данной строки в коде:
Settings.Global.putInt (getContentResolver (), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 0); , где CAPTIVE_PORTAL_DETECTION_ENABLED должен быть глобальным параметром, который установкой в 0 избегает проверки (тестирование сервером google) wi-fi на интернет-доступ.
К сожалению в зависимости от версии Android Studio и ОС Android данная константа может быть скрыта и не поддерживаться. Из-за чего может потребоваться использовать напрямую строку «captive_portal_detection_enabled», а не константу:
Settings.Global.putInt (getContentResolver (), «captive_portal_detection_enabled», 0); Но это также может не помочь.
Есть возможность использовать adb (для изменения пользовательских настроек) , для чего необходимо иметь root-права . Этот способ я даже не пробовал использовать, т.к. нас интересует только программное решение. Так как у нас приложение должно будет вносить изменения, то нам необходимо получить разрешение WRITE_SETTINGS , что позволяет программе читать или записывать защищенные системные настройки. Данное разрешение было отменено из пользовательских приложений (как в не системных приложениях) в api23.
Итак чтобы использовать WRITE_SETTINGS необходимо:
— Прописать в манифесте
Может потребоваться также . Хотя если есть WRITE_SETTINGS то последнее не требуется. По состоянию на Android 6.0.1 CHANGE_NETWORK_STATE автоматически предоставляется при запросе в вашем файле манифеста. Вышеуказанные проверки WRITE_SETTINGS требуются только для 6.0 ;
— Вызовите Settings.System.canWrite () , чтобы узнать, имеете ли вы право на запись настроек.
— Если canWrite () возвращает false, запустите действие ACTION_MANAGE_WRITE_SETTINGS , чтобы пользователь мог согласиться, и ваше приложение действительно могло писать настройки. Это необходимо сделать один раз.
В файл активности добавим функцию проверки данного разрешения.
Начиная с android Marshmellow, нам необходимо использовать разрешения во время выполнения, которые направлены на повышение безопасности, или использовать когда это необходимо. Ниже скриншоты проверки и включения:
Разрешение для программы получили. Теперь для подключения к wi-fi используем следующую функцию:
Данный код, выше, будет соединять только сети с интернет-доступом. Здесь также имеем изменения. Ниже ссылка на статью ( Connecting your App to a Wi-Fi Device ) по этому поводу: https://android-developers.googleblog.com/2016/07/connecting-your-app-to-wi-fi-device.html
Кратенькая выдержка из статьи : But, on Lollipop and above, if that network doesn’t have internet connectivity network, requests will not be routed to it.
Routing network requests
To direct all the network requests from your app to an external Wi-Fi device, call ConnectivityManager#setProcessDefaultNetwork on Lollipop devices, and on Marshmallow call ConnectivityManager#bindProcessToNetwork instead, which is a direct API replacement. Note that these calls require android.permission.INTERNET; otherwise they will just return false.
где – bindProcessToNetwork — связывает текущий процесс с сетью. Здесь произошли изменения в сетевых технологиях и Wi-Fi. Раньше, если приложение форсировало подключение устройства к определённой Wi-Fi сети, используя enableNetwork () с настройкой disableAllOthers=true , устройство отключалось от других сетей, типа мобильной передачи данных. В этом релизе устройство больше не отключается от других сетей. Если в приложении для targetSdkVersion задано “20” или ниже, то оно привязывается к заданной Wi-Fi. Если же targetSdkVersion “21” или выше, используйте мультисетевые API (такие как openConnection (), bindSocket () и новый метод bindProcessToNetwork () ), чтобы быть уверенным, что трафик идёт через выбранную сеть. Теперь ваши приложения могут изменять состояние WifiConfiguration объектов только если они сами эти объекты создали. Вы не можете изменять или удалять WifiConfiguration объекты, созданные пользователем или другими приложениями.
Для подключения к беспроводной сети без интернет соединения во первых мы должны:
— добавить в манифест -что позволяет приложениям открывать сетевые сокеты;
— использовать ConnectivityManager#bindProcessToNetwork . Ниже функция где перед подключением к сокету, проверяем версию ОС.
Здесь мы создаем ConnectivityManager для запроса сети с высокой пропускной способностью Wi-Fi или сотовая сеть. Используем класс NetworkRequest.Builder для создания объекта NetworkRequest и указываем сетевые функции и тип передачи, в которых ваше приложение заинтересовано. Для сканирования подходящих сетей вызоваем requestNetwork () или registerNetworkCallback () и передаем объект NetworkRequest и реализацию ConnectivityManager.NetworkCallback . Используйте метод requestNetwork () , если вы хотите использовать подходящую сеть после ее обнаружения. Для получения только уведомлений найденных сетей без подключения, используйте вместо этого метод registerNetworkCallback () . Когда система обнаруживает подходящую сеть, она подключается к ней и вызывает обратный вызов onAvailable () вашего экземпляра NetworkCallback . Если подходящая сеть не найдена, метод onAvailable () не вызывается, поэтому вы должны вручную произвести запрос. Можно использовать объект network из обратного вызова для получения дополнительной информации или прямого трафика выбранной сети.
Ниже скриншот подсоединения телефона к модулю esp8266 и его свойства в конфигурации телефона.
Чтобы оптимизировать потребление батареи, сетевое соединение должно оставаться зарегистрированным только на время действия. Для чего следует рассмотреть вопрос о выпуске сети. Поэтому добавим кнопку в приложение которая будет освобождать сеть.
На по следок приведу ссылку на статью ( Programatically connecting to a WiFi network with Captive Portal on Marshmallow ) программного подключения к сетям где используется библиотека android-wificonnect , выложенная на github.com . ( https://www.intentfilter.com/ ). Я ее пока не использовал. Но по описанию она имеет включения/выключения выше описанных нюансов.
Подводим итог. В выше написанной статье мы рассмотрели включение модуля Wi-Fi. Получили необходимые разрешения для чтения и записи системных настроек. Рассмотрели изменения в политике безопасности подключения к сетям. Написали и разобрали функцию подключения без интернет доступа. Добавили кнопку освобождения сети. Хочется отметить, что данный код не всегда подключает модуль, например при отсутствии мобильного интернета, приложение не будет подсоединяться. На данном этапе для дальнейшего тестирования приложения и модуля остановимся на данном коде. В будущем рассмотрим стандарт Wi-Fi Direct (Wi-Fi Peer-to-Peer). В следующей статье научимся передавать данные через модуль ESP8266 в микроконтроллер STM32 и обратно. Добавим поле для вывода информации в приложение. На этом сегодня и остановимся. Всем пока.
Выбор и подключение к сети Wi-Fi на Android. Шаг №88 : 2 комментария
Здравствуйте! Если не требуется подключаться автоматически, отключите параметр «Автоподключение». Чтобы при следующем подключении к сети появился экран приветствия, отключите параметр «Автовход».
Источник