Сегодня в рубрике «как создать android application» мы с вами напишем небольшое приложение, которое сканирует и выводит на экран список Wi-Fi точек доступа в радиусе вашего устройства с указанием имени сети, типа защиты и уровня мощности сигнала.

Создаем проект в Андроид Студио. Вводим имя проекта. Шаблон для проекта выбираем Basic Activity. Все остальные настройки оставляем по умолчанию.

Шаблон Android Studio Basic Activity
Откроем макет контента главного экрана. Здесь удалим ненужное текстовое поле и вместо него добавим виджет списка ListView. У нас на экране будет список, который будет заполняться информацией о точках доступа Wi-Fi, обнаруженных поблизости.

Поскольку стандартный вид списка нам не подходит, создадим макет пункта списка и настроим его под свои нужды.

Сначала создадим файл макета с корневым элементом компоновки RelativeLayout. Добавим линейный компоновщик LinearLayout. Нам понадобятся три текстовых поля — одно с крупным текстом, и два с текстом помельче. Для этого идеально подойдут готовые виджеты, которые находятся на вкладке «Дизайн». Выберем один Large Text и два Small Text. Изменим текст, который содержат текстовые поля, на заголовки полей.
Идентификаторы этих полей нам не понадобятся — можно удалить. Эти поля будут отображать только заголовки. А для размещения информации о точках доступа создадим еще три текстовых поля — напротив уже созданных. Для этого скопируем весь линейный компоновщик с текстовыми полями и настроим его так, чтобы он отображался с правой стороны экрана. Здесь нам уже понадобятся идентификаторы, допишем их.
Также для всего макета добавим пространство имен tools, с помощью которого сделаем так, что текст полей справа будет отображаться только на предпросмотре.
А еще добавим свойство выравнивания текста по правому краю текстового поля, а также добавим ограничение длины поля «Тип защиты» — оно может вывадить длинные строки, и тест будет наезжать на другие поля.
Макет пункта списка готов, будем использовать его при построении списка.

Теперь откроем макет activity-main.xml и настроим отображение кнопки.

Мы будем использовать FAB для запуска сканирования точек доступа. Нужно заменить иконку на кнопке на более подходящую. Для этого я предварительно скачал иконку с сайта materialdesignicons.com. Вы можете скачать ее по ссылке (щелкните правой кнопкой мыши и выберите «Сохранить ссылку как…»). Скопируем иконку в папку drawable и заменим стандартную иконку для плавающей кнопки.

Прежде чем перейти к написанию кода приложения, добавим необходимые разрешения в манифест. Они нужны для получения доступа к списку сетей Wi-Fi, которые видит устройство.

Начнем писать код. В основном пакете создаем класс Element.java. Этот класс будет хранить описание полей пункта списка и будет использоваться адаптером при создании списка.

Здесь три строковых переменных — по количеству текстовых полей. Также создадим конструктор, инициализирующий все три поля. Комбинация клавиш Alt+Insert используется при этом. И с помощью нее же создадим геттеры для всех полей.

Всю основную реализацию напишем в классе главного экрана — MainActivity.java. Для начала создадим необходимые переменные.

Затем в конце кода создадим внутренний класс адаптера, который будет заполнять список.

Здесь для простоты мы создаем внутренний класс, более подробно о создании и настройке своего адаптера смотрите урок 54 на нашем канале, ссылка.
Объявим контекст. Также создадим конструктор, который будет принимать контекст в качестве параметра.
В конструкторе передаем контекст, макет пункта списка и массив элементов списка.
Далее пропишем реализацию заполнения пункта списка данными.
Создаем объект inflater с помощью которого будем заполнять данными макет пункта списка, находим макет по id.
Далее находим по идентификаторам каждое текстовое поле в отдельности и заполняем его данными.
Последнее поле — уровень сигнала — будем заполнять не полученными данными, а по условию. Для этого нам нужно вычислять уровень сигнала. Поскольку Wi-Fi менеджер возвращает строку, будем приводить ее к формату int и настроим условие, в зависимости от значения уровня будем выводить в текстовое поле три слова — высокий, средний и низкий уровень. Вся конструкция будет выполняться в блоке try-catch с отловом исключения NumberFormatException, чтобы в случае ошибки формата приложение не упало, а вывело нам сообщение в консоль.

Теперь напишем метод detectWifi, в котором будем считывать данные о доступных сетях, разбирать их и передавать адаптеру для наполнения списка.

Сначала создаем Wi-Fi Manager и запускаем сканирование. Результат сканирования сохраняем в список wifilist.
Далее создаем массив элементов и начинаем разбор данных. Как я уже говорил, Wi-Fi Manager возвращает данные в строковом формате, гда различные праметры расположены по порядку и разделены запятыми. В цикле мы последовательно перебираем каждый параметр, и получаем его значение, которое отделено от имени параметра двоеточием. Нам нужны значения только трех параметров — идентификатор сети, тип защиты и уровень сигнала, заполняем ними каждый элемент массива.
В завершение создаем адаптер, находим макет списка и присваиваем адаптер списку.

Осталось только вызвать метод detectWifi в обработчике нажатия кнопки FAB.

По умолчанию используемый шаблон настроен так, что при нажатии FAB выезжает снекбар с сообщением. Оставим так, но изменим текст сообщения и длительность его отображения.
Давайте запустим приложение на реальном устройстве и проверим, как оно работает.

Приложение работает, список нормально отображается.

device-2016-09-22-093437

Но есть один нюанс — при повороте экрана активити пересоздается, и список исчезает. В манифесте можно настроить активити так, чтобы оно не пересоздавалось при смене ориентации и в некоторых других распространенных случаях. В этом нам поможет атрибут configChanges с такими параметрами:

Теперь при повороте экрана активити не пересоздается, и список не теряется.

Полный код класса MainActivity:

Файл сборки модуля app:

Приложение нужно запускать на устройстве с версиями до Android 6.0. В 6-й версии изменили поход к работе с разрешениями — разрешения приложение запрашивает не в момент установки, а в момент использования функции, требующей наличие разрешения. Поэтому для работы этого приложения на версии Android 6.0 и выше необходимо написать проверку наличия необходимых разрешений и запроса разрешения при его отсутствии. Этим мы займемся на одном из последующих уроков, следите за новостями на нашем канале и сайте fandroid.info.

Как создать приложение Wi-Fi сканнер для андроид обновлено: Октябрь 5, 2016 автором: admin

  1. В 6-й версии изменили ПОХОД к работе с разрешениями — разрешения приложение запрашивает не в момент установки, а в момент использования функции, требующей наличие разрешения.

  2. какой должен быть SDK к этому проекту? 23 можно?

    пожалуйста, перечислите ВСЕ что должно быть установлено в SDK.

    я получаю ошибку в Main.activity.java
    design.widget.FloatingActionButton;
    design.widget.Snackbar;
    .v7.app.AppCompatActivity;
    .v7.widget.Toolbar;
    R.

    что у меня не установлено????
    что надо установить чтобы работало?

  3. В этом проекте использовалась 24 версия — смотрите, файл сборки добавлен в текст урока. И импорты проверьте в главном классе.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website