Мобильное приложение для сбора данных о влиянии скорости передачи данных

Мобильное приложение для сбора данных о влиянии скорости передачи данных

В статье представлен процесс разработки мобильного приложения для смартфона на платформе Android с функцией отправки GPS-координат текущего местоположения на сервер через определенный интервал времени. Описан интерфейс пользователя и внутренний интерфейс приложения, а также приведено обоснование принятых технических решений.

Аннотация статьи
мобильное приложение
смартфон
Open Server
сервер
Android Studio
ОС Android
ГЛОНАСС/GPS
Ключевые слова

В рамках работы над системой предупреждения дорожно-транспортных происшествий путем информирования водителей о возникновении аварийной ситуации в условиях недостаточной и ограниченной видимости, на основании измерения параметров движения автотранспортного средства в режиме реального времени с использованием технологий ГЛОНАСС/GPS, была поставлена задача разработать приложение для смартфона на платформе Android с функцией отправки GPS-координат текущего местоположения на сервер через определенный интервал времени.

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

  • имя трека, указываемое в приложении для идентификации;
  • дата и время отправки данных на сервер;
  • дата и время получения ответа от сервера предыдущего запроса;
  • в зависимости от способа передачи данных на сервер передается используемое на смартфоне поколение мобильной связи или обозначение использования технологии беспроводной локальной сети Wi-Fi.

Для выполнения данного задания была использована среда разработки Android Studio [1] для написания приложения для смартфона и локальный веб-сервер Open Server [2] – серверная платформа с Apache, PHP, MySQL, PHPMyAdmin.

Саму реализацию можно разбить на два этапа: это разработка клиентского приложения для смартфона и разработка серверной части приложения.

Разработка и отладка клиентского приложения для смартфона на платформе Android происходила в Android Studio. Сам интерфейс приложения состоит из следующих компонентов:

  • Слой главного окна приложения (рис. 1, а), на котором находятся следующие элементы: Button, который начинает/останавливает отправку данных на сервер; TextView, который ведет лог данных: выводит дату и время отправки данных на сервер, а так же дату и время ответа от сервера.
  • Слой настроек приложения preference screen (рис. 1, б), где находится следующие элементы: элемент EditTextPreference, в котором указывается имя для идентификации на стороне сервера; 2 элемента ListPreference – для выбора частоты отправки данных на сервер и выбора самого сервера на который будут отправляться данные.
  • Боковая шторка главного окна (рис. 1, в), где имеется два пункта: «Настройки разрешений» – открывает настройки приложения, где можно управлять разрешениями приложения; «Очистить экран» – позволяет очистить экран TextView главного окна, куда выводится лог данных.

а) главное окно приложения

б) настройки приложения

в) боковая шторка главного окна

Рис. 1. Интерфейс мобильного приложения

При нажатии на элемент Button на главном окне приложения (кнопка запустить) вызывается функция, в которой проверяются разрешения приложения, которые указаны в файле манифеста, а именно:

  • access_coarse_location;
  • access_fine_location;
  • read_phone_state.

Первые два разрешения предназначены для приблизительного и точного получения координат от GPS соответственно, последнее же разрешение предоставляет доступ к большому количеству информации о телефоне, но конкретно в нашем случае нам потребуется только информация об используемом стандарте мобильной сети.

Если пользователь предоставил данные разрешения приложению, будет запущена служба переднего плана (foreground service). Выбор службы переднего плана обусловлен тем, что приложение может работать как в активном режиме, так и в фоновом, когда приложение свернуто или телефон заблокирован. Можно было бы использовать обычную службу, работающую в фоновом процессе, но, начиная с версии Android 8.0, данный способ уже не будет работать из-за изменений в поведении операционной системы (далее ОС) от разработчиков Android, т.к. ОС Android может в целях оптимизации выключить данное приложение. Чтобы ОС не могла отключать данное приложение необходимо в настройках оптимизации найти данное приложение и запретить ОС оптимизировать его.

В запускаемой службе имеется слушатель локальной службы GPS, который реализует интерфейс LocationListener. Данный интерфейс имеет четыре метода, однако используется только метод onLocationChanged (Location location). Данный метод вызывается для получения текущих координат от ГЛОНАСС/GPS, а после внутри данного метода создается объект, унаследованный от класса AsyncTask, в который передается два параметра – широта и долгота. AsyncTask предназначен для перемещения трудоёмких операций в фоновый поток, а отправка сетевых запросов вполне может быть ресурсозатратной задачей, которая выносится в отдельный поток.

В выполняемом фоновом потоке формируется POST запрос и отправляется на сервер. При получении ответа от сервера приложение фиксирует время ответа сервера и ID предыдущей записи, который пришел от сервера ответом. Данный ID необходим для того, чтобы при следующем запросе на сервер в строке БД с указанным ID изменить поле «Дата и время подтверждения».

Серверная часть приложения состоит из базы данных и набора РНР страниц. Структура базы данных представлена ниже (рис. 2).

Рис. 2. Структура базы данных

Полученные данные с телефона заносятся в базу данных, а именно: Имя, широта, долгота, дата и время отправки, поколение мобильной сети. Поле «Дата и время подтверждения» остается пустым и изменяется последующим запросом от клиента. Именно для этого ответом на запрос приложению отправляется ID вставленной строки в БД.

Если полученный от клиента ID имеет значение «-1», значит, данная запись от клиента первая в данной сессии и не нужно обновлять поле «Дата и время подтверждения» (Шаг 1), в противном случае ID содержит номер предыдущей вставленной записи данного клиента, и он занесет дату и время подтверждения предыдущего запроса в поле «Дата и время подтверждения» (Шаг 2). Принцип заполнения таблицы представлен далее по тексту (рис. 3, 4).

Рис. 3. Шаг 1. Занесение данных в БД

Рис. 4. Шаг 2. Занесение данных в БД

Чтобы создать трек-файл необходимо выбрать из выпадающего списка имя и выбрать временной промежуток для выборки данных. При нажатии на кнопку «Создать» будет сформирован и скачан файл с расширением kml [3], где kml это язык разметки на основе XML для представления трёхмерных геопространственных данных в программе «Google Карты» и «Google Планета Земля» (рис. 5).

Рис. 5. Выбор данных для создания kml файла

Теперь, если открыть данный файл в программе «Google Карты», можно увидеть маршрут, построенный по выбранным данным путем соединения соседних точек (рис. 6).

Рис. 6. Сформированный kml файл, открытый в программе «Google карты»

В процессе разработки было создано приложение для смартфона на платформе Android с функцией отправки: ГЛОНАСС/GPS-координат текущего местоположения, имени пользователя, даты и времени отправки данных на сервер и получения ответа от сервера предыдущего запроса. Также в зависимости от способа передачи данных на сервер передается используемое на смартфоне поколение мобильной связи или обозначение использования технологии беспроводной локальной сети Wi-Fi. На сервере, помимо сохранения полученных данных, была реализована функция для создания трек-файла, открыв который в программе «Google Карты», становится возможным увидеть весь пройденный маршрут.

Текст статьи
  1. Androidstudio. Инструкция по установке и работе с программой [Электронный ресурс]. URL: http://androidstudio.ru/
  2. Open Server Panel – Локальный веб-сервер для Windows [Электронный ресурс]. URL: https://ospanel.io/
  3. Руководство по KML [Электронный ресурс]. URL: https://developers.google.com/kml/documentation/kml_tut?hl=ru
Список литературы
Ведется прием статей
Прием материалов
c 17 октября по 31 октября
Сегодня — последний день приема статей
Препринт статьи — после оплаты
Справка о публикации
сразу после оплаты
Размещение электронной версии
04 ноября
Загрузка в elibrary
04 ноября
Рассылка печатных экземпляров
06 ноября