ОГЛАВЛЕНИЕ ВВЕДЕНИЕ .................................................................................................................. 3 Актуальность ........................................................................................................ 3 Цель работы .......................................................................................................... 3 Задачи, решаемые в ходе работы ....................................................................... 3 ГЛАВА 1 ОБЗОРНО-АНАЛИТИЧЕСКАЯ ЧАСТЬ ................................................ 5 1.1 Анализ популярных мобильных операционных систем............................ 5 1.2 Обоснование выбранной операционной системы ...................................... 6 1.3 Анализ существующих IDE для разработки приложения ......................... 7 1.4 Обоснование выбора IDE для разработки приложения ............................. 9 1.5 Анализ методов геолокации ......................................................................... 9 1.6 Обоснование выбора метода геолокации .................................................. 11 1.7 Анализ метода хранения данных ............................................................... 16 1.8 Обоснование выбора метода хранения данных ........................................ 18 1.9 Обзор метода проектировки пользовательского интерфейса ................. 21 1.10 Android Guidelines ...................................................................................... 23 ГЛАВА 2 ПРАКТИЧЕСКАЯ ЧАСТЬ ..................................................................... 24 2.1 Activity .......................................................................................................... 24 2.2 Жизненный цикл активности ..................................................................... 24 2.3 Service............................................................................................................ 25 2.4 Жизненный цикл сервисов.......................................................................... 26 2.5 Разработка структуры ПО ........................................................................... 26 2.6 Разработка геолокационного модуля ......................................................... 28 2.7 Разработка модуля создания пользовательских настроек ....................... 30 2.8 Разработка модуля автономной работы .................................................... 32 1 2.9 Разработка окна настройки приложения ................................................... 32 2.10 Разработка пользовательского интерфейса. Прототипирование .......... 33 2.11 Разработка пользовательского интерфейса. Верстка ............................. 35 2.12 Разработка пользовательского интерфейса. Конечный вариант .......... 37 2.13 Локализация приложения ......................................................................... 40 2.14 Алгоритм работы программы ................................................................... 41 ЗАКЛЮЧЕНИЕ ......................................................................................................... 43 Полученный результат ...................................................................................... 43 СПИСОК ЛИТЕРАТУРЫ......................................... Error! Bookmark not defined. 2 ВВЕДЕНИЕ Актуальность В современном мире мобильные устройства стали неотъемлемой частью жизни человека. Начало – середина 2000-х годов стала рассветом мобильного рынка, так как мобильные устройства стали доступны более широкому кругу людей. Поначалу, приложения для мобильных устройств, нацеленные на решение локальных задач, разрабатывались без связи с сетью Интернет. С развитием мобильного интернета, приложения стали больше нацелены на доступ в Сеть. В конце 2000-х, начале 2010-х годов мобильные приложения стали все больше использовать сервисы геолокации. Большинство обладателей мобильных телефонов используют их в качестве помощников в современной жизни. Стало доступно большое количество приложений для создания заметок, напоминаний, расписаний, установок будильников. В современном мире большое количество людей посещают театры, конференции, учебные места и не могут быть уверены в том, что в их телефоне выбраны правильные настройки звука, яркости экрана, беспроводных сетей. В связи с этим, является актуальным создание приложения, автоматизированно управляющего настройками мобильного устройства, исходя из геопозиции человека. Цель работы Целью настоящей работы является создание мобильного приложения, использующего сервис геолокации и автономно управляющего системными настройками, исходя из настроек профиля, заранее созданного пользователем. В рамках данной работы разработана начальная версия приложения. Задачи, решаемые в ходе работы 1. Анализ популярных мобильных операционных систем с целью 3 выявления наиболее подходящей для создания приложения; 2. Анализ существующих IDE для разработки приложения; 3. Анализ методов геолокации; 4. Анализ методов хранения данных; 5. Разработка навигационного модуля; 6. Разработка модуля создания пользовательских настроек; 7. Разработка модуля автоматизированной работы; 8. Разработка пользовательского интерфейса приложения. 4 ГЛАВА 1 ОБЗОРНО-АНАЛИТИЧЕСКАЯ ЧАСТЬ 1.1 Анализ популярных мобильных операционных систем В данный момент на рынке мобильных операционных систем существует три лидера: iOS, Android, Windows Phone. iOS — закрытая мобильная ОС, разрабатываемая и выпускаемая американской компанией Apple. Была выпущена в 2007 году. В отличие от Windows Phone и Android, выпускается только для устройств, производимых фирмой Apple. Разработка под данную операционную систему требует наличия техники Apple и IDE XCode. Публикация приложений невозможна без наличия сертификата, полученного от виртуального магазина App Store. Также, следует отметить, что App Store является единственным средством дистрибуции приложений. К достоинствам данной мобильной операционной системы стоит отнести стабильность работы и гарантированную работу приложений на всех современных устройствах под управлением iOS. Android — открытая мобильная операционная система, разработанная американской компанией Google. Основана на ядре Linux и собственной реализации виртуальной машины от Google. Выпущена в 2008 году. Разработка приложений для операционной системы Android возможна во многих IDE на языке программирования Java. Для разработки приложений Google выпустила два пакета разработки: SDK и NDK. Дистрибуция приложений возможна как через официальный магазин приложений Google Play, так и через сторонние онлайн-магазины (например, Amazon Appstore, Яндекс.Store). Windows Phone — мобильная операционная система, разработанная корпорацией Microsoft. Windows Phone является приемником Windows Mobile. Выпущена в 2010 году. Для разработки приложений Microsoft выпустила Windows Phone SDK, для которого необходимо наличие Visual Studio 2012 Express for Windows Phone и Expression Blend for Windows Phone. 5 Приложения, написанные для данной операционной системы, публикуются в Windows Phone Store. 1.2 Обоснование выбранной операционной системы Основными критериями выбора операционной системы для разработки приложения являются: 1. Доля на рынке мобильных устройств; 2. Удобство разработки и отладки приложения; 3. Удобство дистрибуции приложения. В таблице 1 представлена доля всех мобильных операционных систем на рынке мобильных устройств по состоянию на Апрель 2015 г. Операционная система Доля на рынке Android 52.47% iOS 38.81% Symbian 2.79% Java ME 2.78% Windows Phone 2.07% BlackBerry 0.96% Kindle 0.06% Samsung 0.03% Bada 0.01% Windows Mobile 0.00% LG 0.00% Таблица 1. Сравнение рынка мобильных операционных систем На данный момент, на мировом рынке лидерство закрепилось за операционной системой Android, что делает данную ОС наиболее привлекательной для разработки приложений. Также, в пользу выбора 6 данной операционной системы стоит отметить, что разработка и отладка приложений под Android является наиболее удобной в силу наличия выбора между средами разработки и большого спектра как мобильных устройств, так и виртуальных машин. Также стоит отметить проблему выбора начальной и конечной версии мобильной операционной системы, актуальных для разрабатываемого приложения. На рисунке 1 представлен график распространенности устройств с различными версиями Android. Рис 1. График версий ОС Android На основании данного графика была выбрана выбрана минимальная версия Android, необходимая для работы приложения — 4.0.3. 1.3 Анализ существующих IDE для разработки приложения Для разработки приложений под операционную систему Android можно использовать множество IDE, рассмотрим самые заметные из них: Eclipse, IntelliJ IDEA, Android Studio. Eclipse — открытая интегрированная среда разработки приложений, изначально разрабатываемая фирмой IBM. Наиболее важными достоинствами Eclipse являются: 1. Кроссплатформенность. Eclipse выполняется на всех распространенных 7 платформах; 2. Универсальность и расширяемость. В Eclipse предусмотрена возможность использования различных дополнений и плагинов, разработанных сторонними программистами. 3. Открытость и бесплатность. Eclipse является OpenSource-проектом и имеет активное коммьюнити, постоянно работающее над улучшением программы и расширением ее возможностей. IntelliJ IDEA — коммерческая интегрированная среда разработки приложений. Разработана фирмой JetBrains и позиционируется как «IDE, которая понимает код». Основным преимуществом данной IDE перед Eclipse является понимание контекста. IDE индексирует весь проект, анализирует все, что в нем есть и строит синтаксическое дерево. Рассмотрим аспекты, в которых выражается умение «понимать контекст»: Отладка. В отличие от Eclipse, в которой для того, чтобы увидеть значение какого-либо выражения, необходимо полностью, без лишних символов, выделить это выражение и нажать Ctrl + Shift + I, в IDEA достаточно просто навести курсор на это выражение и нажать Alt + F8. Автозаполнение. В этой области IDEA также имеет преимущество. Благодаря «пониманию положение курсора и контекста» данная предлагает актуальный IDE анализирует вариант для заполнения. Рефакторинг. В плане рефакторинга IDEA также имеет преимущество над Eclipse. Самым заметным недостатком IntelliJ IDEA служит ее коммерческая направленность и урезание функций в бесплатной версии. Android Studio — IDE, созданная компанией Google. Основой для Android Studio стала платформа IntelliJ от компании JetBrains. Отличием от IDEA является изначальная направленность на разработку приложений для 8 операционной системы Android. 1.4 Обоснование выбора IDE для разработки приложения Основным критерием выбора интегрированной среды разработки является удобство разработки преимущества, указанные и отладки приложения. Учитывая выше, и тот факт, что разрабатываемое приложение рассчитано на мобильные устройства, была выбрана Android Studio. 1.5 Анализ методов геолокации Сервис геолокации обеспечивает информацию о месте пребывания, либо назначения посредством интерактивных карт с минимальным набором данных, тем самым предоставляя наиболее оптимальный маршрут следования, как на личном и общественном транспорте, так и пешком. Сервис отображает местонахождение знакомых и объектов инфраструктуры, отмеченных ими, на том сегменте карты, где находится пользователь. Разработка геолокационного модуля состоит из следующих задач: Выбор метода поиска координат; Разработка функции получения координат долготы и широты из адреса. Существуют два метода для поиска координат: 1. Метод, основанный на классе LocationManager. 2. Метод, основанный на технологии FusedLocationProvider. Рассмотрим эти методы подробнее: 1. LocationManager был добавлен в API 1, предназначен для получения информации о местоположении пользователя. Когда появляются новые координаты, LocationManager сообщает об этом. Данный сервис позволяет приложению местоположения получать телефона. периодические LocationManager 9 может обновления получать координаты, как от спутников GPS, так и через сотовую связь или WiFi. Алгоритм поиска координат в данном методе слишком прямолинеен: позволяется выбрать только один способов определения местоположения: сеть или данные, полученные от GPS. Основной недостаток данного метода: для получения точных координат (например, в здании) пользователю необходимо переключаться между определением координат по координатам сети и спутникам GPS. 2. В 2013 году на выставке Google I/O была презентована новая технология определения местоположения Fused Location Provider. Данная технология позволяет определять координаты смартфона с большей точностью, при этом потребляя меньше электроэнергии. При активном использовании данное API потребляет меньше 1% заряда в час, что идеально подходит для приложений, требующих постоянных обновлений координат. Используя сервисы определения координат Google Play, приложение получает координаты устройства, которые, в основном, совпадают с координатами пользователя. Fused Location Provider – один из API, представленных в сервисе Google Play. Fused Location Provider анализирует данные, полученные от GPS, мобильной сети и Wi-Fi, для предоставления наиболее точных данных. Также, данный сервис позволяет использовать различные сенсоры телефона для определения движения пользователя и установления частоты обновления координат. Помимо определения координат в геолокационном модуле необходим метод получения координат из адреса. Для разработки данного метода используем процесс геокодирования. Геокодирование - это процесс перевода описания местоположения в GPS-координаты (широта, долгота, высота над уровнем моря) и обратный процесс. В Android для геокодирования есть специальный класс Geocoder. C его помощью можно трансформировать адрес или другое описание местности в координаты и наоборот. Результаты 10 будут зависеть от предоставляемой информации. Можно ввести точное название улицы города для получения списка близлежайших домов, а можно указать только город и почтовый индекс. Для работы с Geocoder требуется подключение к сервису. 1.6 Обоснование выбора метода геолокации Для поиска координат необходим метод, удовлетворяющий следующим критериям: Метод не должен потреблять много энергии; Должна быть обеспечена работа в фоновом режиме; Реализация в одном классе; Метод должен получать максимально точные координаты. Для выбора наилучшего метода определения координат, был проведен следующий тест: было написано два небольших приложения для определения координат пользователя: в первом используется метод Location Manager, в другой – Fused Location Provider. Тестирование будет проводиться на телефоне Samsung Galaxy S4, версия ОС Android 4.3. На момент проведения тестирования батарея была полностью заряжена. Рис. 2. Начало тестирования 11 Тестирование проводится в течении 5 часов. Во время тестирования телефон будет запрашивать координаты каждые 10 минут. После проведения тестирования будут приведены сравнительные изображения с уровнем заряда батареи. Результаты тестирования: Рис. 3. Результаты тестирования LocationManager Рис. 4. Результат тестирования Fused Location Provider Был рассмотрен уровень расхода заряда батареи, теперь необходимо перейти к точности определения местоположения. Благодаря различным приоритетам определения координат, Fused Location Provider позволяет сделать оптимальный выбор между точностью и расходом заряда. 12 В таблице 2 представлено сравнение приоритетов при определении координат. Приоритет Интервал между Расход батареи в Точность обновлениями час (%) HIGH_ACCURACY 5 секунд 7,25% ~10 метров BALANCED_POWER 20 секунд 0,6% ~40 метров NO_POWER Н/Д Низкий ~1,5 километра Таблица 2. Сравнение приоритетов при определении координат На рисунке 5 представлены координаты, полученные благодаря LocationManager и Fused Location Manager. Рис. 5. Полученные координаты 13 Сравнение их с координатами, полученными из адреса, благодаря методу геокодирования. Рис. 6. Координаты, полученные из геокодирования 14 Для проверки полученных координат, введем их в сервис Google Maps. Рис. 7. Проверка координат в Google Maps Исходя из проведенных тестов, оба метода показали достаточно точные результаты. Основываясь на тестах, проведенных выше, Fused Location Provider является наилучшим выбором. Так как оба метода показали одинаково высокую точность, был выбран метод, потребляющий как можно меньше энергии. Также, большим преимуществом данного метода является одновременное получение данных, как от спутников GPS, так и от данных мобильной сети и Wi-Fi, в то время как LocationManager одновременно может пользоваться только одним источником информации. Но также следует учитывать то, что метод Fused Location Provider не будет работать на устройствах, на которых отсутствует поддержка сервисов Google Play, поэтому необходимо сделать проверку на поддержку сервисов. 15 1.7 Анализ метода хранения данных Хранение профилей, созданных пользователем возможно, как локально, так и в памяти устройства. Для хранения профилей существуют следующие методы: Хранение профилей в базе данных SQLite; Хранение профилей в формате XML; Хранение профилей в формате JSON. Профиль пользователя должен иметь следующие параметры: Имя профиля; Координаты широты и долготы; Область, на которой действуют настройки; Настройки, выбранные пользователем. SQLite — встраиваемая кроссплатформенная база данных, поддерживающая достаточно полный набор команд SQL. SQLite довольно популярна и часто используется в разработке мобильных приложений. SQLite доступен на любом Android-устройстве, его не нужно устанавливать отдельно. SQLite поддерживает типы TEXT (аналог String в Java), INTEGER (аналог long в Java) и REAL (аналог double в Java). Остальные типы следует конвертировать, прежде чем сохранять в базе данных. SQLite сама по себе не проверяет типы данных, поэтому вы можете записать целое число в колонку, предназначенную для строк и наоборот. Так как сама база данных SQLite представляет собой файл, то по сути при работе с базой данных, мы взаимодействуем с файлом. Поэтому операции чтения и записи могут быть довольно медленными. Следовательно, рекомендуется использовать асинхронные операции, например, при помощи класса AsyncTask. Работа с базой данных сводится к следующим задачам: Создание и открытие базы данных; Создание таблицы; Создание интерфейса для вставки данных; 16 Создание интерфейса для выполнения запросов; Закрытие базы данных. Основные преимущества SQLite заключаются в надежности за счет ряда тестов, популярности и производительности. XML (Extensible Markup Language) -- расширяемый язык разметки. XML представляет собой текстовый формат, предназначенный для хранения структурированных данных. Сегодня XML может использоваться в любых приложениях, которым нужна структурированная информация -- от сложных геоинформационных систем, с гигантскими объемами передаваемой информации до обычных "одно-компьютерных" программ, использующих этот язык для описания служебной информации. XML-документ представляет собой обычный текстовый файл, в котором при помощи специальных маркеров создаются элементы данных, последовательность и вложенность которых определяет структуру документа и его содержание. Основным достоинством XML документов является то, что при относительно простом способе редактироваться стандартными создания любым XML структурированную и обработки тестовым процессором анализаторами), информацию, (обычный они которую и текст обрабатываться позволяют хорошо может создавать "понимают" компьютеры. JSON (JavaScript Object Notation) -- простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. JSON простой, основанный на использовании текста, способ хранить и передавать структурированные данные. С помощью простого синтаксиса пользователь может легко хранить все, что угодно, начиная от одного числа до строк, массивов и объектов, в простом тексте. Также можно связывать между собой массивы и объекты, создавая сложные структуры данных. После создания строки JSON, ее легко отправить другому приложению или в другое место сети, так как она представляет собой простой текст. JSON имеет следующие 17 преимущества: Компактность, по сравнению с XML; Легкость в чтении как человеком, так и машиной; Легкость преобразования в структуру данных для большинства языков программирования; Многие языки программирования имеют функции и библиотеки для создания и чтения JSON. 1.8 Обоснование выбора метода хранения данных Использование базы данных является нецелесообразным в силу того, что в приложении хранятся небольшие объемы данных. Одним из основных критериев выбора способа хранения данных является удобство создания и обработки структуры данных. Также, немаловажную роль играет удобство чтения данных человеком. Было проведено сравнение XML и JSON по следующим критериям: 1. Простота, открытость и взаимодействие; 2. Расширяемость; 3. Удобство чтения человеком; 4. Полная интеграция всех возможных форматов; 5. Обмен простыми данными; Результаты сравнения: В вопросах простоты, открытости и взаимодействия XML и JSON различия минимальны; В плане расширяемости, JSON уступает XML. JSON позволяет хранить только простые данные, например текст. В XML же можно хранить любые данные. Способность расширять атрибуты данных, хранимых в XML делает этот формат более гибким, чем JSON. Однако данная особенность делает данный формат менее удобочитаемым. Этот 18 фактор зависит от того, что требуется хранить. К примеру, документам, хранящимся в XML расширяемость необходима для хранения изображений, графиков, диаграмм и прочих элементов. И JSON, и XML устроены так, что человек может прочитать информацию, хранимую в этих форматах. Тем не менее, из-за ограничения поддерживаемых типов данных, JSON читается немного удобнее XML. Пример структуры профиля в форматах JSON и XML: Рисунок 8. Пример структуры JSON Рисунок 9. Пример структуры XML В данном случае и JSON, и XML читаются одинаково удобно изза наличия в обоих структурах только простых элементов. Как было отмечено ранее, в XML, в отличие от JSON, пользователь может хранить любые типы данных, что не всегда хорошо. Например, в XML добавить исполняемый файл, что может быть опасным для безопасности. JSON, благодаря своей простоте, позволяет избежать использования данной лазейки. 19 Для обмена и обработки простых данных JSON подходит лучше, так как использует массивы и объекты, в то время, как XML хранит данные в дереве. Оба этих метода имеют свои преимущества, но обмен и обработка данных намного проще, когда данные хранятся в структуре, родной программирования. для Эта объектно-ориентированных особенность позволяет с языков легкостью импортировать файлы из JSON в объектно-ориентированные языки программирования, например, в Java, Perl, Ruby, Python. В случае с XML, перед импортированием данных их требуется сначала преобразовать. В обоих случаях необходимо не только создать структуру, но и хранить ее. Хранить данные можно в виде отдельного файла, либо в виде SharedPreference. SharedPreferences – это класс, который позволяет сохранять и извлекать данные в виде пар "ключ-значение". Данные будут храниться в виде строки. Беря в расчет то, что в профиле будут храниться простые данные и то, что программе будет необходимо постоянно обращаться к структуре, в результате выбора между XML и JSON был выбран JSON, так как, благодаря своей простоте, он является наиболее удобным для формирования и обработки данных. 20 Также, использование формата JSON позволяет в дальнейшем реализовать поддержку облачного хранения профилей пользователей. Данные хранятся в файле для дальнейшего их анализа. . Рис. 10. Файл со структурой JSON 1.9 Обзор метода проектировки пользовательского интерфейса Пользовательский интерфейс является связующим звеном между пользователем и компьютером. Он обеспечивает взаимодействие человека и машины, обмен действиями и реакцией на них. Юзабилити — степень удобства пользование программой, является одним из важнейших этапов разработки программы. Хороший пользовательский интерфейс учитывает особенности людей, минимизирует ошибки и раздражение пользователя. Обычный пользователь, впервые, открывая приложение видит именно его интерфейс, и от того, насколько этот интерфейс одновременно прост и интуитивно понятен зависит то, будет ли приложение пользоваться популярностью. Критерии к пользовательскому интерфейсу: 21 1. Интерфейс должен быть понятен и легок к освоению наибольшему кругу лиц (т.е. иметь наименьший порог вхождения); 2. Предоставлять пользователю возможность ввода информации, не показывая процесс вычислений; 3. Отвечать всем потребностям пользователя, не заостряя его внимания на процессе обработки данных. Следуя данным критериям делается вывод что интерфейс должен быть простым и понятным с первого взгляда. У пользователя не должно возникать никаких вопросов по взаимодействию с приложением и навигации между экранами для достижения поставленных задач. Также следует минимизировать число шагов, за которые достигается решение данных задач. Пользовательский интерфейс должен удовлетворять следующим требованиям: 1. Цветовая гамма приложения не должна быть яркой и содержать «кислотные цвета», но при этом сочетание цветов должно быть контрастным; 2. Дизайн должен быть простым и понятным, необходимо избегать использование непонятных иконок и пространственных описаний; 3. Навигация между окнами также должна быть предельно простой и понятной. У пользователя нет никакого желания блуждать в «лабиринте» из разных окон; 4. Хорошим тоном также является наличие обратной связи с пользователем. Приложение должно уведомлять пользователя о том, что оно откликнулось на какой-либо запрос. Также следует учитывать то, что приложение будет использоваться на разных экранах с разным разрешением, пропорциями соотношения сторон дисплея. Благодаря данным особенностям, на этапе проектирования необходимо позаботиться о том, чтобы интерфейс легко масштабировался и подстраивался под разные экраны. 22 1.10 Android Guidelines Разработчики рекомендации к мобильных созданию операционных систем пользовательского создают интерфейса. свои Такие рекомендации создают свод правил, которым должны следовать сторонние разработчики. Данные правила именуются Guidelines. Гайдлайны необходимы для того, чтобы все приложения, разрабатываемые для операционной системы, строились по одному принципу, а пользователю, для достижения необходимых целей, необходимо следовать одним и тем же алгоритмам. Но это не означает, что разработчики и проектировщики дизайнов имеют жесткие рамки, скорее наоборот – гайдлайны облегчают разработку интерфейса и приложения становятся более понятны простому пользователю. 23 ГЛАВА 2 ПРАКТИЧЕСКАЯ ЧАСТЬ 2.1 Activity Activity, или активность — аналог формы в программировании настольных приложений. Чаще всего, активности взаимодействуют с пользователем посредством пользовательского интерфейса. Активность, запускающаяся при старте приложения, считается главной. Из главной активности можно запускать другие активности, притом, не всегда активности, запускаемые из главной, должны принадлежать одному и тому же приложению. 2.2 Жизненный цикл активности Активность имеет жизненный цикл. Началом этого цикла служит создание экземпляра активности, концом – уничтожение системой экземпляра и освобождение ресурсов. Активность может находиться в трех состояниях: 1. Активная — активность находится на переднем плане экрана. Пользователь может взаимодействовать с активным окном: 2. Приостановленная — активность потеряла фокус, но все еще видима пользователю. То есть, активность находится сверху и частично перекрывает данную активность. Приостановленная активность может быть уничтожена системой в критических случаях при нехватке памяти; 3. Остановленная — активность полностью закрыта другой активностью. Она больше не видима пользователю и может быть уничтожена системой, если память необходима для более важного процесса. 24 Рисунок 11. Жизненный цикл Activity 2.3 Service Service, или сервис — компонент приложения, обеспечивающий продолжительную работу в фоновом режиме. Сервисы не имеют пользовательского интерфейса и необходимы в тех случаях, когда не требуется вмешательства пользователя. Служба будет продолжать работать до тех пор, пока кто-нибудь не остановит ее или пока она не остановит сама себя. В отличие от активностей, сервисы предназначены для длительного существования. Сервисам дается более высокий приоритет, чем бездействующим активностям, поэтому, вероятность того, что сервис будет завершен из-за нехватки ресурсов, минимальна. При использовании сервисов приложения будут продолжать свою работу даже в неактивном состоянии. Также существует подкласс класса Service, именуемый IntentService. Он предназначен для выполнения тяжелых задач, которые могут выполняться асинхронно. IntentService создает поток для своей работы, отслеживает все входящие данные и отправляет их на обработку в этот поток. 25 2.4 Жизненный цикл сервисов Подобно активностям, сервисы имеют свой жизненный цикл. Рисунок 12. Жизненный цикл Service 2.5 Разработка структуры ПО При разработке приложения были использованы следующие классы: 1. MainActivity; 2. AddNewPlaceActivity; 3. MapsActivity; 4. SettingsActivity; 5. BackgroundService; 6. Profile. 26 Рисунок 13. Дерево классов Класс MainActivity является главной активностью. В данном классе создается метод получения координат из FusedLocationProviderApi, переход к AddNewPlaceActivity, MapActivity и SettingsActivity, а также запуск сервиса BackgroundService. Запуск приложений происходит с помощью намерения (Intent). Intent — механизм для описания одной операции (например, открыть фотографию, сделать звонок). В Android многие операции происходят через намерения. Также, через намерения можно передавать данные, которые затем считываются при помощи BroadcastReceiver. BroadcastReceiver — один из важнейших компонентов при создании приложений для Android. Это компонент для получения внешних событий и реакции на них. Но самостоятельно Broadcast Receiver не выполняет никаких 27 действий, а передает сигнал дальше, например, выводит уведомление. Рисунок 14. Пример получения информации при помощи BroadcastReceiver В классе AddNewPlaceActivity создается JSON файл, содержащий в себе профили, созданные пользователем в данной активности. Класс MapActivity содержит в себе карту Google Map, отображающую текущее местоположение пользователя и метки, полученные из JSON файла. Класс SettingsActivity обеспечивает пользователю выбор настроек для выбора способа оповещения и интервала обновления данных о местонахождении. BackgroundService обеспечивает обработку поступающих координат в фоновом режиме. 2.6 Разработка геолокационного модуля Для работы с FusedLocationProviderApi необходимо подключиться к сервисам Google Play. Рисунок 15. Подключение к сервисам Google Play После того, как приложение подключилось к GooglePlay Services, задаются параметры для запроса текущего местоположения. 28 Рисунок 16. Создание параметров получения координат При выборе интервала, с которым приложение будет запрашивать координаты, и приоритета точности стояла проблема выбора оптимальных параметров. Был проведен тест, в котором проверялось потребление энергии при разных параметрах интервала обновления и точности координат, в результате которого был сделан вывод, что оптимальный интервал запроса обновления координат будет составлять полчаса при приоритете точности PRIORITY_HIGH_ACCURACY. Далее, осуществляются запросы координат долготы и широты. Рисунок 17. Запуск получения координат После этого, в методах onLocationChanged и onConnected получаем координаты и отправляем их на обработку в BackgroundService. Рисунок 18. Метод onConnected 29 Рисунок 19. Метод onLocationChanged Рисунок 20. Создание и запуск сервиса, работающего в фоновом режиме Затем, из полученных от сервиса данных создается уведомление, содержащее текущие координаты пользователя. Уведомление также создается если пользователь находится области действия, созданного им ранее профиля. Уведомление пользовательского — сообщение, интерфейса которое приложения. В отображается начале, вне уведомление появляется в виде небольшой иконки в зоне уведомлений. Если пользователь хочет узнать подробную информацию, ему нужно открыть панель уведомлений. 2.7 Разработка модуля создания пользовательских настроек При создании профиля настроек , пользователь должен ввести имя профиля, область, в которой данные настройки будут действовать, и затем сами настройки. Настройки включают в себя: Настройки громкости телефона: o Silent — сигналы отсутствуют полностью; o Vibrate — звуковые сигналы отсутствуют, включен вибровызов; o Loud — звуковые сигналы полностью включены. 30 Настройки беспроводных сетей. При необходимости, пользователь может задать выключение WiFi при применении настроек. Затем, пользователь должен выбрать метод получения координат для создания профиля: от FusedLocationProviderAPI или через сервис геокодирования. Далее, создается и сохраняется в память телефона структура JSON, включающая в себя: Название профиля; Массив координат; Массив настроек. Рисунок 21. Создание и сохранение файла с настройками Рисунок 22. Создание массива профилей 31 Рисунок 23. Создание массива координат Рисунок 24. Создание массива настроек 2.8 Разработка модуля автономной работы Автономная работа осуществляется посредством IntentService. На вход в IntentService поступают координаты и данные, полученные из файла с настройками. Далее идет обработка данных и передача их обратно в главную активность. Благодаря этому, приложение будет получать и обрабатывать данные даже тогда, когда оно неактивно. 2.9 Разработка окна настройки приложения Класс SettingsActivity PreferenceActivity и унаследован описывает от создание родительского различных класса параметров, необходимых для работы приложения. Настройки являются важной частью Android приложения. Со стороны разработчика очень важно — позволять пользователям изменять настройки приложения, в зависимости от их предпочтений. Существует два способа создания настроек: через создание файла preference_settings.xml в директории res/xml, или задавать настройки из кода. В данной работе был использован первый метод. Элементы настроек имеют следующие атрибуты: 32 android:key — ключ, по которому в дальнейшем можно получить значение настройки; android:title — заголовок элемента настройки; android:summary — описание элемента настройки; android:defaultValue — значение настройки по умолчанию. Доступные типы элементов настроек: CheckBoxPreference — флаговая кнопка, возвращающая значение true или false; ListPreference — группа переключателей, из которых быть выбран может только один; EditTextPreference — поле ввода, возвращающее строку; RingtonePreference — группа переключателей с выбором рингтона; Preference — настройка, работающая как кнопка; PreferenceScreen — экран с настройками. Один PreferenceScreen может вмещать в себя другой, тогда открывается новое окно с настройками; PreferenceCategory — категория настроек. Настройки приложения хранятся в структуре Preference. Приложение автоматически создает файл в своей папке и хранит простые данные в виде пары «ключ-значение». В данном приложении пользователю позволяется выбрать способ оповещения о нахождении профиля, соответствующего координатам, а также интервал, с которым приложение будет запрашивать текущие координаты. 2.10 Разработка пользовательского интерфейса. Прототипирование При разработке пользовательского 33 интерфейса были учтены рекомендации, высказанные в гайдлайнах. Интерфейс создан максимально простым, интуитивно понятным и не напрягающим глаза пользователя. Проектирование интерфейса производилось при помощи приложения для прототипирования пользовательских интерфейсов FluidUI. FluidUI — мощный онлайн-конструктор, с помощью которого можно быстро создать макет интерфейса приложений для iPhone, iPad, Android, Windows Phone. Основные достоинства FluidUI: 1. Экономия времени. FluidUI позволяет за короткое время набросать эскиз интерфейса и сразу же протестировать его на мобильном устройстве. 2. Оптимизация процесса проектирования. Сервис дает возможность разбить работу на несколько этапов, что позволяет сокращать сроки разработки приложения. 3. Совместное проектирование. В разработке может участвовать несколько дизайнеров и программистов, что позволяет обсуждать процесс проектирования непосредственно во время его выполнения. Также следует отметить плюсы данного сервиса как для клиента, так и для программиста. Плюсы для клиента. Благодаря FluidUI можно наглядно показать заказчику наглядно показать работу приложения на промежуточных этапах с целью выявления ошибок и недочетов в логике работы приложения. Плюсы для разработчика. Сервис FluidUI значительно упрощает задачу программистов по «сборке» всех экранов в единое функционирующее приложение. 34 Рисунок 25. Прототип пользовательского интерфейса 2.11 Разработка пользовательского интерфейса. Верстка Для верстки приложений для Android существует пять стандартных типов: 1. AbsoluteLayout. Каждый элемент верстки будет иметь абсолютную позицию относительно верхнего левого угла экрана. 2. FrameLayout. Тип верстки, внутри которого может отображаться только один элемент в строке. Это означает, что при помещении нескольких элементов в один FrameLayout, один элемент будет накладываться на другой. 3. LinearLayout. Тип верстки, при котором область верстки делится на строки и в каждую строку может помещаться один элемент. Разделение на строки может быть, как вертикальным, так и горизонтальным. Также, существует возможность комбинировать вертикальную и горизонтальную разбивки, а также комбинирование разных типов верстки. 4. RelativeLayout. Один из самых гибких стандартных типов верстки. Позиционирование элементов происходит относительно друг друга и относительно главного контейнера. 35 5. TableLayout. Табличная верстка, при которой элементы организуются в строки и столбцы таблицы. Для верстки приложения был выбран тип RelativeLayout, так как он позволяет создавать более удобный интерфейс. При создании приложения следует учитывать большое количество поддерживаемых разрешений и размеров экранов. Для правильного отображения интерфейса на экранах с разной плотностью пикселей, существует единица измерения размера элемента, называемая Densityindependent pixel (dp). Один dp эквивалентен одному пикселю на экране с плотностью 160 пикселей. Приложение достигает независимости от плотности экрана тогда, когда элементы пользовательского интерфейса отображаются одинаково на экранах с разной плотностью пикселей. ОС Android помогает достичь независимости от плотности следующими способами: Система подгоняет dp под текущий размер экрана; При необходимости, система масштабирует изображение до нужного размера, основываясь на текущем размере экрана. В большинстве случаев, для того, чтобы приложение было независимо от плотности экрана, программисту следует задать размер элементов в dp. 36 2.12 Разработка пользовательского интерфейса. Конечный вариант Конечным этапом прототипирования и проектировки интерфейса служат пять экранов: Рисунок 26. Экран MainActivity 37 Рисунок 27. Экран AddNewPlaceActivity Рисунок 28. Экран ввода адреса для геокодирования 38 Рисунок 29. Экран MapActivity с созданной точкой Рисунок 30. Экран SettingsActivity 39 2.13 Локализация приложения Для того, чтобы приложением пользовался как более больший круг людей, следует позаботиться о его локализации. Хорошим тоном считается разработка программ на английском языке, и последующая их локализация. Android SDK предоставляет разработчикам удобный способ для локализации своих приложений благодаря ресурсам. Ресурсы — один из основных компонентов в Android SDK. В Android принято держать объекты, такие как изображения, строковые константы, цвета, анимации, стили и т.п. вне исходного кода. Каждое приложение на Android содержит каталог для ресурсов res. Android умеет динамически выбирать данные из дерева ресурсов содержащие разные значения для разных конфигураций, языков и регионов. При запуске Android автоматически загружает нужный ресурс. На текущий момент приложение поддерживает два языка: русский и английский. 40 Рисунок 31. Пример приложения на русском языке 2.14 Алгоритм работы программы На вход программе поступают данные, полученные от сервиса определения местоположения. Далее, эти данные помещаются в сервис и там обрабатываются. Также, в сервис поступают данные полученные из файла с созданными профилями. Если текущие координаты находятся в области, заданной в профиле, происходит оповещение пользователя и к телефону применяются настройки, заданные заранее. 41 Рисунок 32. Блок-схема работы приложения 42 ЗАКЛЮЧЕНИЕ Полученный результат Результатом разработки программы служит рабочее приложение, использующее службы геолокации и работающее в фоновом режиме. В дальнейшем планируется реализация недостающих функций, например, добавление «черного списка» контактов, и публикация приложения в магазин приложений Google Play. В ходе выполнения данной выпускной квалификационной работы были рассмотренны проблемы выбора методов определения координат пользователя и хранения данных. Для решения проблемы выбора метода геолокации были созданы тесты, в которых сравнивалась точность определения координат и потребление энергии. Для выбора наилучшего способа хранения данных провелось сравнение различных структур данных. Результатом сравнения методов хранения данных послужил выбор наиболее простой для обработки и понимания способ. 43 СПИСОК ЛИТЕРАТУРЫ 1. Г. Шилдт. Java. Руководство для начинающих Шестое издание / Шилдт Г. Изд.: Вильямс, 2012. – 624 с. 2. H. Schildt. Java: The Complete Reference / Schildt H. Изд.: Mcgraw –Hill Osborne Media, 2014. – 1274 с. 3. Р. Седжвик, К. Уэйн. Алгоритмы на Java / Седжвик Р. Изд.: Вильямс, 2011. – 848 с. 4. W. Lee. Android Application Development Cookbook / Lee W. Изд.: John Wiley & Sons, Inc, 2012. – 386 с. 5. R. Meier. Professional Android 4 Application Development / Meier R. Изд.: Wrox, 2012. – 868 с. 6. R. Hodson. Android Programming Succinctly / Hodson R. Изд.: Syncfusion Inc., 2014. – 113 с. 7. B. Phillips, B. Hardy. Android Programming: The Big Nerd Ranch Guide / Phillips B. Изд.: Big Nerd Ranch Inc., 2013. – 580 с. 8. A. Gerber, C. Craig. Learn Android Studio: Build Android Apps Quickly and Effectively / Gerber A. Изд.: Apress, 2015. – 484 с. 9. E. Hellman. Android Programming: Pushing the Limits / Hellman E. Изд.: Wiley, 2013. – 432 с. 10.G. Nudelman. Android Design Patterns: Interaction Design Solutions for Developers / Nudelman G. Изд.: Wiley, 2013. – 456 с. 11.I. Clifton. Android User Interface Design: Turning Ideas and Sketches into Beautifully Designed Apps (Usability) / Clifton I. Изд.: Addison-Wesley Professional, 2013. – 400 с. 44 12.J. Annuzzi Jr., L. Darcey, Shane Conder. Introduction to Android Application Development: Android Essentials / Annuzzi J. Изд.: AddisonWesley Professional, 2013. – 672 с. 13.C. Horstmann. Core Java Volume I / Horstmann C. Изд.: Prentice Hall, 2012. – 1008 с. 14.Android Guidelines [Электронный ресурс] // Developer.Android. URL: https://developer.android.com/design/index.html. (Дата обращения: 18.04.2015). 15.Android Developers [Электронный ресурс] // Developer.Android. URL: http://developer.android.com/index.html. (Дата обращения: 18.04.2015). 45