В настоящее время трудно представить свою жизнь без мобильного телефона. Если раньше он был атрибутом деловых людей, то сейчас есть практически у всех. Высокий ритм жизни требует от нас повышенного внимания к происходящему, необходимость быть всегда на связи, и иметь под рукой верного помощника.
Неудобство эксплуатации компьютеров и ноутбуков и желание узнавать своевременно различную информацию, пользоваться почтой, просматривать веб-страницы, иметь различные развлекательные возможности, подтолкнуло человечество к созданию телефонов, которые бы заменили в полной мере возможности ПК, поэтому в основе современных телефонов лежит все та же операционная система. Основными платформами на сегодняшний день являются Android, iOS, BlackBerry и Windows Phone. Для полноценной работы этих платформ необходимо наличие различных мобильных приложений. Самыми первыми мобильными приложениями можно считать список контактов в телефоне и сервис для отправки\приёма SMS. Сейчас в связи с развитием сотовой связи и беспроводных технологий (Wi-Fi, WiMax, 3G, 4G) мобильные приложения ушли далеко вперёд, поэтому вопрос об их разработке в современном мире становится все более актуальным.
Одной из важнейших проблем на сегодняшний день, требующей внимания от каждого собственника жилого помещения является учет и оплата коммунальных услуг. Домовладельцу приходится всегда помнить о своевременном снятии показаний и оплате квитанций, рассчитывать стоимость огромного количества дополнительных услуг, таких как интернет, телефон, домофон и вести их учёт. При наличии нескольких жилых помещений этот процесс становится еще сложнее. Поэтому разработка мобильного приложения, которое бы взяло на себя основную часть этих забот, наглядно бы показывало все затраты и объем потребления и всегда было бы под рукой, является актуальным разрешением данной проблемы.
Целью курсовой работы является разработка программы на базе Android — приложение, позволяющее вести расчёт и учет платежей и показаний ЖКХ, напоминающее об оплате коммунальных услуг и снятии показаний, а также обеспечивающее резервное копирование данных.
Для выполнения поставленной цели требуется выполнить следующие задачи:
- Ознакомиться с существующими мобильными ОС и выбрать на свой взгляд наилучшую;
- Изучить особенности выбранной ОС;
- Ознакомиться с существующими аналогами разрабатываемого приложения, изучить их функциональность;
- Разработать техническое задание для мобильного приложения;
- Спроектировать интерфейс программы и порядок её взаимодействия с пользователем;
- Рассмотреть основные компоненты и средства разработки мобильных приложений;
- Разработать мобильное приложение.
1. Обзорно-аналитическа часть
Система мобильной сотовой связи GSM
... сеть GSM может предоставлять следующие типы услуг: услуги по переносу информации (bearer services); услуги предоставления связи (teleservices); дополнительные услуги (supplementary services). GSM обеспечивает поддержку следующих услуг: Услуги передачи ... для технологии GSM (см. GSM-FR, GSM-HR и GSM-EFR) Широкое распространение, особенно в Европе, большой выбор оборудования. Возможность роуминга. ...
1.1 Анализ и выбор операционной системы
При создании мобильного приложения, первый возникающий вопрос — для какой платформы его разрабатывать. На рынке мобильных платформ список лидирующих имен неизменен в течении последних трех лет. Изменения происходят исключительно между этими лидерами, а именно: IOS, Android, BlackBerry OS, Windows Mobile OS.
IOS — закрытая операционная система от Apple. Выпускается исключительно для устройств, разрабатываемой компанией Apple. Разработка под IOS требует либо наличия техники Apple и программы разработки XCode, либо использовать сторонние сервисы для удаленной компиляции приложений. Публикация приложений не возможна без сертификатов от виртуального магазина App Store, так же App Store, является единственным полностью легальным средством дистрибуции приложений. К плюсам этой системы можно отнести стабильность и гарантированную работу приложений на современных устройствах. Неподобающие по качеству или контенту приложения не допускаются к распространению в App Store.
BlackBerry OS — операционная система от BlackBerry. Устройства компании BlackBerry нацелены, в первую очередь, на категорию бизнесменов и корпоративных клиентов. Имеет крайне малую долю на рынке в мире. Работает только на устройствах компании BlackBerry. Имеет возможность адаптации Android приложений под себя, но полная работоспособность не гарантирована.
Windows 7 и Windows 8 (мобильные версии) — молодая система от Microsoft. Для разработки требуется Silverlight (программная платформа, позволяющая запускать приложения, содержащие анимацию, векторную графику и аудио- видео ролики) или XNA (набор инструментов облегчающий разработку и управление компьютерными играми).
Так же, Microsoft выпустила инструментарий разработчика Windows Phone, для которого необходимы Visual Studio 2010 Express for Windows Phone и Expression Blend 4 для Windows Phone. На данный момент так же имеет малую долю рынка в России.
Android — открытая операционная система от Google. Android позволяет создавать Java-приложения, управляющие устройством через разработанные Google библиотеки. Для дистрибуции приложений Google запустила онлайн-магазин Google Play. Для распространения приложения через онлайн-магазин требуется платная учетная запись, но также возможно распространять приложения любым удобным для разработчика способом как просто передавать установочный apk файл, так и через сторонние онлайн-магазины (например, Яндекс.Store).
Лидирующую позицию уже не первый год занимает операционная система Android. По данным исследований, проведенных российской компанией Synovate Comcon эта ОС установлена на 70,6 % всех смартфонов. Второе место занимает iOS. Более подробные данные приведены на Рис.1 [1].
Рис.1 График изменения долей рынка между ОС за последние 3 года
Основываясь на этих данных, можно сделать вывод, что мобильные приложения, написанные для работы на устройствах с операционной системой Android лидируют на сегодняшний день, а, следовательно, и проблема разработки таких приложений является достаточно актуальной.
Интернет. Технология поиска информации в системе «Google.ru»
... прибыль и расширить возможности своих пользователей". Об этом и будет мой реферат: о технологиях поиска в Google, о дополнительных функциях поиска и о дополнительных функциях, доступных через ... центры, которые занимаются проблемами поиска. Несмотря на то, что Google и так уже является лучшей поисковой системой в Интернет, они разрабатывают новые продукты, а также разные ...
1.2 Обзор мобильной операционной системы Android
ОС Android — операционная система для мобильных телефонов, планшетных компьютеров и нетбуков, основанная на ядре Linux. Изначально разрабатывалась компанией Android Inc., которую затем купила компания Google. Первая версия ОС Google Android вышла в сентябре 2008 года. В конце 2010 года платформа Android стала самой продаваемой ОС для смартфонов.
ОС Android — это набор открытого программного обеспечения для мобильных устройств от компании Google, в состав которого входит операционная система и комплект базовых межплатформенных приложений. Приложения для ОС Android являются программами в байт-коде для виртуальной машины Dalvik, которая является частью мобильной платформы Android.
1.3 Архитектура операционной системы Android
Если представить компонентную модель Android в виде иерархии (Рис.2) [2], то можно выделить 4 основных уровня:
- Уровень ядра Linux;
- Уровень библиотек (Libraries);
- Уровень среды исполнения (Android Runtime);
- Уровень каркаса приложений (ApplicationFramework);
- Уровень приложений (Applications).
Уровень ядра Linux. В самом низу, в основе будет располагаться ядро операционной системы.ОС Android основана на ОС Linux версии 2.6, тем самым платформе доступны системные службы ядра, такие как управление памятью и процессами, обеспечение безопасности, работа с сетью и драйверами. Также ядро служит слоем абстракции между аппаратным и программным обеспечением.
Рис.2 Обзор архитектуры Android
Уровень библиотек (Libraries).»Выше» ядра, как программное обеспечение промежуточного слоя, лежит набор библиотек, предназначенный для решения типовых задач, требующих высокой эффективности. То есть, именно этот уровень отвечает за предоставление реализованных алгоритмов для вышележащих уровней, поддержку файловых форматов, осуществление кодирования и декодирования информации, отрисовку графики и многое другое. Библиотеки реализованы на C/C++ и скомпилированы под конкретное аппаратное обеспечение устройства, вместе с которым они и поставляются производителем в предустановленном виде.
Перечислим некоторые из низкоуровневых библиотек:
SurfaceManager — диспетчер поверхностей управляет доступом к подсистеме отображения 2D- и 3D- графических слоев.
Media Framework — библиотеки, c помощью которых система может осуществлять запись и воспроизведение аудио и видео данных, а также вывод статических изображений.
SQLite — легковесная и производительная реляционная СУБД, используемая в Android в качестве основного движка для работы с базами данных.
3D libraries — библиотеки для работы с 3D-графикой.
FreeType — библиотека, предназначенная для работы со шрифтами.
LibWebCore — ядро встроенного web-браузера.
SGL (ScalableGraphicsLibrary) — библиотека для работы с 2D-графикой.
SSL — библиотеки для поддержки одноименного криптографического протокола.
libc — библиотека стандартных вызовов языка C.
Уровень среды исполнения (Android Runtime).
На этом же уровне располагается Android Runtime — среда выполнения прикладных программ. Ключевыми её составляющими являются набор стандартных библиотек и виртуальная машина Dalvik. Каждое приложение в ОС Android запускается в собственном экземпляре виртуальной машины Dalvik. Таким образом, все работающие процессы изолированы от операционной системы и друг от друга. Архитектура Android Runtime такова, что работа программ осуществляется строго в рамках окружения виртуальной машины. Благодаря этому осуществляется защита ядра операционной системы от возможного вреда со стороны других её составляющих. Поэтому код с ошибками или вредоносное ПО не смогут испортить ОС Android и устройство на её базе. Такая защитная функция, наряду с выполнением программного кода, является одной из ключевых для Android Runtime.
Уровень каркаса приложений (ApplicationFramework).
ОС Android позволяет полностью использовать API (интерфейс программирования приложений — набор готовых классов, процедур, функций, структур и констант) используемый в приложениях ядра. Архитектура построена таким образом, что любое приложение может использовать уже реализованные возможности другого приложения при условии, что последнее откроет доступ на использование своей функциональности. Таким образом, архитектура реализует принцип многократного использования компонентов ОС и приложений.
Основой всех приложений является набор систем и служб:
Диспетчер действий (ActivityManager) управляет жизненным циклом приложений и предоставляет систему навигации по истории работы с действиями.
Диспетчер окон (Window Manager) управляет окнами, и предоставляет для приложений более высокий уровень абстракции библиотеки Surface Manager.
Поставщик содержимого (ContentProviders) — это службы, которые позволяют приложениям получать доступ к данным других приложений, а также предоставлять доступ к своим данным.
Система представлений (ViewSystem) — это богатый набор представлений с расширяемой функциональностью, который служит для построения внешнего вида приложений, включающий такие компоненты, как списки, таблицы, поля ввода, кнопки и т.п.
Диспетчер уведомлений (NotificationManager) позволяет любому приложению отображать пользовательские уведомления в строке статуса.
Диспетчер пакетов (Package Manager) управляет установленными пакетами на вашем устройстве, отвечает за установку новых и удаление существующих.
Диспетчер телефонии (Telephony Manager) содержит API для взаимодействия с возможностями телефонии (звонки, смс и т.п.)
Диспетчер ресурсов (ResourceManager) предназначен для доступа к строковым, графическим и другим типам ресурсов.
Диспетчер местоположения (Location Manager), позволяющий приложениям получать обновленные данные о текущем географическом положении устройства
Уровень приложений (Applications).
На вершине программного стека Android лежит уровень приложений. Сюда относится набор базовых приложений, который предустановлен на ОС Android. Например, в него входят браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов и многие другие. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. И помимо этого базового набора к уровню приложений относятся все прикладные приложения под платформу Android, в том числе и установленные пользователем. [3][4]
1.4 Обзор существующих приложений расчета и учета оплаты услуг ЖКХ
На данный момент существует несколько аналогов приложения, разработанного в рамках курсовой работы. Самые популярные и наиболее функциональные из них, имеющиеся на Google Play Market, представлены в таблице №1. Здесь же показаны основные функции приложений.
Таблица №1. Обзор аналогов приложения, разработанного в рамках курсовой работы.
Функции Приложения |
DomoMetr |
Коммунальные платежи |
Коммунальные услуги |
Коммуналочка (Моё приложение) |
|
Учет услуг по счётчику |
+ |
+ |
+ |
+ |
|
Учет услуг без счетчика |
— |
+ |
+ |
||
Дополнительные услуги |
+ |
— |
+ |
+ |
|
Поддержка многотарифных счетчиков |
— |
+ |
— |
+ |
|
Детальная статистика расходов |
+ |
— |
+ |
+ |
|
Журнал |
+ |
+ |
+ |
+ |
|
Графики и диаграммы платежей и потребления |
+ |
— |
— |
+ |
|
Напоминание об оплате услуг и снятии показаний |
+ |
— |
+ |
+ |
|
Наличие нескольких квартир |
+ |
+ |
— |
+ |
|
Включение и отключение доп. услуг из списка (не надо самостоятельно создавать и удалять услуги) |
— |
— |
+ |
+ |
|
Резервное копирование |
— |
+ |
— |
+ |
|
Большое количество счетчиков (больше 2-х) |
— |
— |
+ |
+ |
|
Дополнительными услугами является интернет, телефон, телевидение, домофон, лифт, консьерж.
Журнал — хранение всех данных по месяцам (показания счетчиков и оплаты услуг).
Первое рассматриваемое приложение — «DomoMetr». Разработчиком данного ПО является Александр Крутов. Скриншоты приложения представлены на рис. 3 и 4. [5]
Рис.3 Главное меню
Следующее приложение — «Коммунальные платежи». Его разработчиком является Виктор Филатов. Скриншоты приложения представлены на рис. 5 и 6. [5]
Рис.4 Журнал
Рис.5 Добавление записей
Последнее приложение, которое, при рассмотрении аналогов, оказалось наиболее функциональным является «Коммунальные услуги» Разработчиком является пользователь под псевдонимом «Atlant». Скриншоты приложения представлены на рис. 7 и 8. [5]
Рис.6 Платежи за свет
Рис.7 Главный экран
Рис.8 Настройки
2. Этапы и средства разработки мобильного приложения
2.1 Основные компоненты и структура приложения
Прежде чем приступить к установке и настройке среды программирования, построению технического задания и проектированию пользовательского интерфейса, следует ознакомимся с компонентами приложения в Android и со структурой приложения.
2.1.1 Компоненты приложений в Android
Каждое Android-приложение запускается в своем собственном процессе. Поэтому приложение изолировано от других запущенных приложений, и неправильно работающее приложение не может беспрепятственно навредить другим Android-приложениям.
Тем не менее, главным параметром Android-приложения является возможность использовать компоненты других приложений, если они дают на это соответствующие права. Допустим, нам нужен некий компонент с прокруткой для отображения текста, и похожий компонент уже реализован в другом приложении. Тогда у нас есть возможность использовать реализованный компонент. В этом случае наше приложение не копирует необходимый код к себе и не создает ссылку на него. Вместо этого приложение делает запрос на исполнение части кода другого приложения, где есть нужный нам компонент [6][7].
Всего в Android-приложениях существует четыре типа компонентов:
- деятельность (Activity);
- служба (Service);
- контентпровайдер (Content Provider);
- приемник широковещательных намерений (Broadcast Receiver).
Activities. Activity представляет собой внешний пользовательский для одного действия, которое пользователь может совершить. Например, приложение для мгновенного обмена сообщениями может использовать одно activity для того чтобы отобразить лист контактов, другое — чтобы создать сообщение для выбранного контакта, третье — чтобы посмотреть историю сообщений или выполнить настройки.
Все activity текущего приложения работают вместе и формируют единый пользовательский интерфейс, однако при этом они независимы между собой. Каждое из них реализовано как подкласс базового класса Activity, обеспечивающего создание окна, в котором программист может поместить визуальный интерфейс.
Каждое activity предоставляет окно по умолчанию. Обычно окно создается в полноэкранном виде, но оно также может и не занимать весь экран и находиться поверх других окон. Activity также может задействовать дополнительные окна — например, всплывающее диалоговое для взаимодействия с пользователем в процессе работы activity, или окно для предоставления текущей информации при выборе какой-нибудь важной опции.
Визуальное содержание окна строится с помощью иерархии визуальных компонентов (или представлений) — объектов, производных от базового класса View. Каждый компонент представляет собой просто прямоугольное пространство внутри окна. Таким образом осуществляется интерактивное взаимодействие с пользователем. К примеру, такое представление может отображать на экране маленькую иконку и инициировать какое-нибудь действие, когда пользователь на неё нажмет. В операционной системе Android уже есть набор готовых визуальных компонент, которые доступны для использования разработчиками. Набор включает в себя кнопки, текстовые поля, полосы прокрутки, меню, флажки-переключатели и многое другое.
Services(сервисы) представляют из себя компоненты, которые работают в фоновом режиме. Он, как правило, требуется для длительных операций или для обеспечения работы удаленных процессов, но в общем случае это просто режим, который функционирует, когда приложение не в фокусе. Примером такого процесса может стать прослушивание музыки в то время, когда пользователь делает что-то другое или получение данных по сети без блокирования текущей активности. Сервис сам по себе не предоставляет пользовательского интерфейса, то есть с пользователем не взаимодействует, а запускается, управляется и связан с другими компонентами, например, activity. Также может запускаться вместе с системой.
Content providers. Данный компонент управляет наборами данных, которые приложения предоставляют другим. Эти данные могут храниться в файловой системе, базах данных SQLite, в сети, или в любом другом постоянном месте, к которому приложение может иметь доступ. Посредством content provider другое приложение может запрашивать данные и, если выставлены соответствующие разрешения, изменять их. Например, система Android содержит content provider, который управляет пользовательской информацией о контактах. Он позволяет любому приложению, обладающему соответствующими правами, вызывать составляющие этого компонента для того, чтобы считывать, записывать или изменять информацию о конкретном человеке.
В более общем случае, content provider можно использовать для чтения и записи данных, которые используются приложением и не являются открытыми для других. Например, приложение Note Pad использует такой компонент для сохранения сделанных записей.
Данные компоненты реализуются как подкласс Content Provider. И для того, чтобы другие приложения могли совершить операции с данными, им необходимо предоставить стандартный набор API.
Broadcast receivers. Этот компонент отвечает за распространение общесистемных сообщений, отслеживание и реагирование на действия. Многие оповещения идут от системы, например, сообщения о том, что заряд батареи мал или экран выключен. Приложения также могут инициировать такие оповещения, например, сигнализировать о том, что информация загружена на устройство и доступна к использованию. Как и сервисы, broadcast receiver не предоставляет пользовательского интерфейса, однако, он способен создавать уведомления в строке состояния, чтобы предупреждать пользователя о том, что произошло какое-то событие. Однако чаще broadcast receiver взаимодействует с другими компонентами для того, чтобы самому выполнять минимальный объем работы. Так, он может инициировать сервисы для выполнения действий, привязанных к какому-то событию.
2.1.2 Процессы и потоки
Когда хотя бы один из компонентов приложения (или все приложение) будет востребован, система Android запускает процесс, который содержит единственный основной поток для выполнения. По умолчанию все компоненты приложения работают в этом процессе и потоке.
Однако можно принять меры, чтобы компоненты работали в других процессах и порождали дополнительные потоки для любого процесса.
Все компоненты инициализируются в основном потоке процесса. Отдельные потоки для каждого экземпляра обычно не создаются. Следовательно, все методы обратного вызова, определенные в компоненте и вызываемые системой, всегда работают в основном потоке процесса. Это означает, что компонент не должен выполнять в методах обратного вызова длительные операции (например, загрузку файлов из сети или циклы вычисления) или блокировать системный вызов, т. к. это блокирует любые другие компоненты в этом процессе. Для таких операций порождают отдельные потоки.
Android может решить завершить процесс в случае нехватки памяти или если память востребована другими, более важными процессами. Прикладные компоненты, выполняющиеся в этих процессах, будут уничтожены. Процесс будет перезапущен для компонентов в случае их повторного вызова.
При выборе процесса для уничтожения Android оценивает относительную важность этого процесса с точки зрения пользователя. Порядок, в котором процессы уничтожаются для освобождения ресурсов, определяется приоритетом. Система Android пытается поддерживать процесс приложения максимально долго, но, в конечном счете, будет вынуждена удалить старые процессы, если заканчивается свободная память. Чтобы определить, какой процесс сохранить или уничтожить, Android создает иерархию важности процессов, основанную на компонентах, выполняющихся в процессах и состоянии этих компонентов.
Процессы с самой низкой важностью уничтожаются первыми. Есть пять уровней в иерархии важности (Рис. 9):
Рис.9 Иерархия важности процессов
Активный процесс (Foreground Process) — тот, который требуется для того, что пользователь в настоящее время делает.
Одновременно могут существовать только несколько приоритетных процессов. Они будут уничтожены только в крайнем случае — если памяти настолько мало, что они все вместе не в состоянии продолжать работу.
Видимый процесс (Visible Process) — тот, который не имеет никаких приоритетных компонентов. Компонент из этого процесса еще может вызываться пользователем.
Сервисный процесс (Service Process) — процесс, в котором выполняется служба и который не относится ни к одной из двух предыдущих категорий.
Фоновый процесс (Background Process) — процесс в котором выполняется деятельность, которую в настоящее время не видима пользователем.
Пустой процесс (Empty Process) — не содержит никаких активных компонентов приложения. Единственная причина сохранять такой процесс — только как кэш, чтобы уменьшить время запуска при вызове компонента. Система уничтожает эти процессы в первую очередь. [4]
2.1.3 База данных SQLite
Платформа Android предоставляет функции управления базой данных, которые позволяют сохранять сложные коллекции данных. Android также поставляется с инструментом управления базой данных sqlite3, который дает возможность просматривать содержание таблиц, выполнять команды SQL и исполнять другие полезные функции на базах данных SQLite.
SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле. Библиотеки Android обеспечивают набор классов для создания и управления базами данных SQLite.
SQLite поддерживает типы TEXT (аналог String в Java), INTEGER (аналог long в Java) и REAL (аналог double в Java).
Остальные типы следует конвертировать, прежде чем сохранять в базе данных. SQLite сама по себе не проверяет типы данных, поэтому можно записать целое число в колонку, предназначенную для строк, и наоборот.
Библиотека Android содержит абстрактный класс SQLiteOpenHelper, с помощью которого можно создавать, открывать и обновлять базы данных. При реализации этого вспомогательного класса скрывается логика, на основе которой принимается решение о создании или обновлении базы данных перед ее открытием. Класс SQLiteOpenHelper содержит два абстрактных метода:
onCreate() — вызывается при первом создании базы данных
onUpgrade() — вызывается при модификации базы данных
В приложении необходимо создать собственный класс, наследуемый от SQLiteOpenHelper. В этом классе необходимо реализовать указанные методы, описав в них логику создания и модификации базы.
В библиотеке Android для управления базой данных SQLite существует класс SQLiteDatabase. Он имеет свои методы для открытия, запроса, обновления данных и закрытия базы, такие как insert(), update(), delete().
[8]
2.1.4 Структура Android проекта
При создании проекта нужно указать его свойства: Application Name (название приложения), Project location (расположение проекта на диске), Min SDK Version (минимально допустимая версия SDK) и Add Activity (выбор главного экрана).
В поле Min SDK Version указывается, какой API будет использоваться в проекте. От выбора зависит набор поддерживаемых функций и версии ОС, на которых приложение сможет работать. Мы уже выбрали минимальную версию Android — 4.1 (Jelly Bean), ей соответствует API 16.
При открытии проекта в AndroidStudio в левом верхнем углу изображена структура проекта (Рис. 10).
Опишем основные папки, зачем они нужны и что в них хранится.
Рис.10 Структура Android-проекта
Первая папка Manifests — в ней хранится файл манифеста или конфигурации приложений. Файл манифеста AndroidManifest.xml предоставляет основную информацию о программе. Каждое приложение должно иметь свой файл AndroidManifest.xml. Он содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями и предназначен для:
- объявления имения Java-пакета приложения, который служит уникальным идентификатором;
- описания компонентов приложения — деятельности, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявление их намерения;
- объявления разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
- объявления минимального уровня API Android, необходимый для работы приложения;
- перечисление связанных библиотек;
- Следующая папка Java — в ней находится «исходный код» нашего приложения (java-классы).
Дальше следует папка res — хранит ресурсы проекта. В Android принято хранить такие объекты, как изображения, строковые константы, цвета, анимацию, стили и тому подобное, за пределами исходного кода. Система поддерживает хранение ресурсов во внешних файлах. Внешние ресурсы легче поддерживать, обновлять и редактировать. В основном, ресурсы хранятся в виде XML-файлов.
Таблица №2. Основные ресурсы Android-приложения
Тип ресурса |
Размещение |
Описание |
|
Цвета |
/res/colors/ |
Идентификатор цвета, указывающий на цветовой код. |
|
/res/strings/ |
Строковые ресурсы. В их число также входят строки в формате java и html. |
||
Меню |
/res/menu/ |
Меню в приложении можно задать как XML-ресурсы. |
|
Параметры |
/res/values/ |
Представляет собой параметры или размеры различных элементов. |
|
Изображения |
/res/drawable/ |
Ресурсы-изображения. Поддерживает форматы JPG, GIF, PNG (самый предпочтительный) и другие. Каждое изображение является отдельным файлом. Система также поддерживает stretchable images, в которых можно менять масштаб отдельных элементов, а другие элементы оставлять без изменений. |
|
Отрисовываемые цвета |
/res/values/ или /res/drawable/ |
Представляет цветные прямоугольники, которые используются в качестве фона основных отрисовываемых объектов, например, точечных рисунков. |
|
Анимация |
/res/anim/ |
Android может выполнить простую анимацию на графике или на серии графических изображений. |
|
Произвольные XML-файлы |
/res/xml/ |
В Android в качестве ресурсов могут использоваться произвольные XML-файлы. |
|
Произвольные необработанные ресурсы |
/res/raw/ |
Любые не скомпилированные двоичные или текстовые файлы, например, видео. |
|
Для удобства система создает идентификаторы ресурсов и использует их в файле R.java (класс R, который содержит ссылки на все ресурсы проекта), что позволяет ссылаться на ресурсы внутри кода программы. Статический класс R генерируется на основе заданных ресурсов и создается во время компиляции проекта.
Большое внимание требует папка layout (разметка/макет) — в ней хранятся XML-файлы описывающие пользовательский интерфейс экранов.
Существует несколько стандартных типов разметок:
FrameLayout является самым простым типом разметки. Обычно это пустое пространство на экране, которое можно заполнить только дочерним объектом View или ViewGroup.
LinearLayout выравнивает все дочерние объекты в одном направлении — вертикально или горизонтально.
TableLayout позиционирует свои дочерние элементы в строки и столбцы.
RelativeLayout позволяет дочерним элементам определять свою позицию относительно родительского представления или относительно соседних дочерних элементов.
Все описываемые разметки являются подклассами ViewGroup и наследуют свойства, определенные в классе View.
И последняя папка Gradle — хранит файлы инструкции, для автоматической системы сборки.
2.2 Этапы разработки мобильного приложения
Разработку приложения для мобильных платформ, можно разбить на этапы.
Первым этапом в создании мобильного приложения является этап разработки технического задания. На этом этапе очень важно определиться с целями и задачами, которые будет решать приложение.
Вторым этапом разработки является проектирование пользовательского интерфейса приложения. На этом этапе создается графическая карта взаимодействия между экранами. Также на этом этапе необходимо определиться, каким образом будет работать приложение, и как будет проходить работа пользователя с ним. Немаловажным на данном этапе является решение о расположении кнопок на экране и то, как пользователь будет переходить с одного экрана на другой.
Третий этап — разработка дизайна
На четвертом этапе начинается разработка технической части приложения. В завершении этого этапа выпускается первая версия работоспособного приложения.
Далее идет тщательное тестирование приложение, по завершению которого происходит исправление ошибок и отладка программной части.
2.2.1 Разработка технического задания
Выбор версии ОС Android
Требуется разработать приложение на ОС Android, для охвата наибольшей аудитории с минимальными потерями в функциональности, необходимо выбрать минимальную версию приложения. Я рассмотрела статистику используемых версий Android проводимой Google (Рис. 11)
Рис.11 Статистика используемых версий Android
Из приведенной статистики видно, что наилучшим вариантом будет версия 4.1, с кодовым именем — Jelly Bean. Выбрав эту версию минимальной, мы охватим 92,6% пользователей Android.
Выбор услуг и их разновидность
Разрабатываемое приложения должно позволять вести статистику за показаниями приборов учета и любыми другими коммунальными расходами, следовательно, необходимо ознакомиться с услугами, предоставляемыми жителям. Их можно разделить на две группы:
Основные услуги:
Горячее и холодное водоснабжение:
- Наличие приборов учета;
- Отсутствие приборов учета;
Электроснабжение:
- Одноставочный тариф;
- Зонный тариф по двум зонам суток: дневная зона, ночная зона;
- Зонный тариф по трем зонам суток: пиковая зона, полупиковая зона, ночная зона;
Газоснабжение:
- Наличие приборов учета;
- Отсутствие приборов учета;
- Отопление.
Дополнительные услуги:
- Интернет;
- Телефон;
- Телевидение;
- Домофон;
- Лифт;
- Консьерж.
Требования к разрабатываемому приложению.
Для того, чтоб определить, что должно включать в себя приложение, воспользуемся Таблицей 1.
Приложение должно иметь:
- Неограниченное число счетчиков и услуг;
- Учет услуг без счетчика (по нормативу или площади);
- Детальную статистика расходов по месяцам;
- Поддержку многотарифных счетчиков;
- Историю тарифов по месяцам;
- Графики и диаграммы платежей и потребления;
- Возможность создания напоминания об оплате коммунальных услуг и снятии показаний;
- Возможность создания резервной копия данных;
- Поддержку нескольких адресов (квартир);
- Для того, чтоб сформулировать общие требования к функциональному поведению приложения построим Use Сase диаграмму (Рис. 12).
Диаграмма Use Case (вариантов использования) определяет поведение системы с точки зрения пользователя. Она используется для выяснения требование к разрабатываемой системе, фиксация требований к форме, которая позволит проводить дальнейшую разработку. Вершинами в диаграмме Use Case являются актёры и элементы. Актёры представляют внешний мир, нуждающийся в работе системы. Элементы представляют действия, выполняемые системой в интересах актёра.
Рис.12 Use Case диаграмма
Опишем представленную выше Use Case диаграмму.
Пользователь представляет собой человека, взаимодействующего с приложением на мобильном устройстве.
Вариант использования «Добавление показаний». Вариант использования начинается, когда пользователь на главном экране выбирает счетчик и нажимает соответствующую ему кнопку. Основной поток событий состоит из следующих шагов:
- Открывается форма с элементами EditText для внесения показаний;
- Внесенные показания заносятся в базу данных вместе с названием услуги, данными о пользователе, вносившем показания и времени добавления показаний;
- Создается элемент TextView в экране истории, в него записываются название услуги и время добавления показания.
После выполнения этого варианта использования пользователь может продолжит вносить показания или вернуться на главный экран.
Вариант использования «Работа с историей» служит для просмотра записей в истории. Вариант использования начинается, когда пользователь выбирает пункт «История» в главном меню приложения.
Основной поток событий состоит из следующих шагов:
- На экране выводится список существующих записей, которое создаются при добавлении показаний;
- Пользователь по нажатии на запись, переходит на форму, которая заполняется данными из базы данных, либо в строке поиска вводит характеристики для фильтрации записей.
У данного варианта использования существует одна точка расширения — «Удаление истории».
Вариант использования «Удаление истории» начинается, когда пользователь выбирает в меню пункт «Удаление отфильтрованных записей» или «Удалить запись» на экране истории, либо на экране информации о записи соответственно. Основной поток событий состоит из следующих шагов:
- Выбранная запись или несколько записей удаляются из базы данных;
- Список записей обновляется.
Вариант использования «Работа с напоминаниями» позволяет пользователю добавлять, изменять напоминания. Он начинается, когда пользователь в главном меню выбирает пункт «Напоминания». Основной поток событий состоит из следующих шагов:
- Открывается экран, содержащий список существующих напоминаний и кнопку «Добавление напоминаний»;
- Пользователь выбирает соответствующее напоминание или нажимает на кнопку, открывается экран изменения напоминаний, содержащий элементы EditText, в которые заносятся данные из базы данных, если данные изменяются или пустые поля, если данные добавляются;
- Напоминание заносится в базу данных.
Данный вариант использования имеет одну точку расширения — «Удаление напоминаний».
Вариант использования «Удаление напоминаний» начинается, когда пользователь выбирает в меню пункт «Удалить напоминания». Основной поток событий состоит из следующих шагов:
- Выбранное напоминание удаляется из базы данных;
- Список напоминаний обновляется.
Вариант использования «Выбор квартиры» начинается, когда пользователь на главном экране в компоненте ListView открывает список пользователей и выбирает одного из них. Основной поток событий состоит из следующих шагов:
- В базу данных заносится идентификатор выбранного пользователя;
- Обновляется элемент Item1.
Вариант использования «Создание учетной записи» начинается, когда пользователь в экране настроек нажимает соответствующую кнопку. Основной поток событий состоит из следующих шагов:
- Открывается экран добавление учетной записи;
- Внесенные данные добавляются в базу данных;
- Пользователь добавляется в элемент SubItem1;
- Вариант использования «Редактирование учетной записи» начинается, когда пользователь в экране настроек нажимает соответствующую кнопку. Основной поток событий состоит из следующих шагов:
- Открывается экран редактирование учетной записи, в который записываются данные о пользователе из базы данных;
- Измененные данные обновляются в базе данных.
Вариант использования «Редактирование учетной записи» начинается, когда пользователь в экране настроек нажимает соответствующую кнопку. Основной поток событий состоит из следующих шагов:
- Данные о пользователе удаляются из базы данных;
- Элемент SubItem1 обновляется.
Вариант использования «Редактирование дополнительных услуг» включает в себя «Выбор услуг», «Отмена услуг» и «Изменение тарифа»
Варианты использования «Выбор услуг» и «Отмена услуг» начинается, когда пользователь применяет соответствующее изменение настроек. Основной поток событий состоит из следующих шагов:
- В базе данных изменяется значение соответствующего поля на противоположное;
- Начинается, либо завершается ежемесячное добавление в историю и базу данных соответствующих данных.
Вариант использования «Редактирование основных услуг», так же включает в себя «Изменение тарифа»
«Изменение тарифа» начинается, когда пользователь применяет соответствующее изменение настроек. Основной поток событий состоит из следующих шагов:
- В базе данных изменяется значение полей;
- Значение тарифа изменяется в экране добавление показаний.
Вариант использование «Резервное копирование» позволяет пользователю создавать резервную копию и восстанавливать данные из резервной копии.
Вариант использования «Создать резервную копию» начинается, когда пользователь в настройках нажимает соответствующую кнопку. Основной поток событий состоит из следующих шагов:
1. В памяти телефона создается папка с файлом для записи данных;
2. В файл записываются данные из базы данных.
Вариант использования «Восстановить из резервной копии» начинается, когда пользователь в настройках нажимает соответствующую кнопку. Основной поток событий состоит из следующих шагов:
- Проверяется существования файла с резервной копией;
- Восстановление данных в базу данных.
2.2.2 Проектирование пользовательского интерфейса
Пользовательский интерфейс обеспечивает взаимодействие между пользователем и компьютером, обмен действиями и ответными реакциями на них. Стоит начать с того, что обращаясь к мобильному приложению, пользователь намеревается найти конкретную информацию, которая нужна ему здесь и сейчас, а значит его не должны стеснять проблемы, связанные с неудобной навигацией, затянутыми откликами приложения на его действия, проблемами мобильного интернета и прочие. Поэтому рассмотрим основные рекомендации, на которые стоит обратить внимание и которые помогут в разработке более удобного и эффективного приложения.
Интерфейс должен быть простым и понятным с первого взгляда, у пользователя не должно возникать вопросов, как взаимодействовать с приложением для достижения собственных целей. Кроме того, число шагов, которые сделает пользователь для достижения цели должно быть минимальным. У пользователя, работающего с грамотно разработанным интерфейсом, не возникнет вопросов, и он не сможет сделать ошибку, производя то или иное действие, пользователь должен понимать на интуитивном уровне, какие изменения это повлечет.
Правилом хорошего тона является наличие обратной связи с пользователем, то есть уведомление его о деятельности приложения, о том, что оно откликнулось на какой-либо запрос.
Нужно учесть также и то, что приложение будет использоваться на разных мобильных телефонах, с разными разрешениями, пропорциями сторон дисплея, небольшими различиями в реакциях устройства на запросы. На этапе проектирования и при разработке программного кода следует учесть эти особенности, проектируя интерфейс так, чтобы он легко масштабировался и подстраивался под то или иное устройство [9].
Для начала разработаем схему рабочих экранов и опишем, какие функции может выполнять пользователь на каждом экране (Рис. 13).
Распределяя функции экранов, следует обращать внимание на соответствие доступности экранной формы и ее цели.
Разработаем концепции рабочих экранов приложения. На главном экране следует расположить функции, которыми пользователь будет пользоваться чаще всего. Это добавление показаний и выбор учетной записи (Рис. 14).
Так же он должен содержать меню, из которого можно перейти на экраны «История», «Напоминания», «Настройка», «Отправка показаний» и «Помощь». Хорошим вариантом будет расположить меню сбоку. Экран «Добавление показаний» (Рис. 15) будет открываться при выборе счетчика из главного экрана.
Рис.13 Схема рабочих экранов
Рис.14 Концепция главного экрана
Рис.15 Концепция экрана «Добавление показаний»
В экране «Добавление показаний» при нажатии на кнопку «Посчитать», будет подсчитываться стоимость и выводится в поле «Итого». Значение поля тариф будет изменяться в экране «Настройки» и служить для информирования пользователя.
Экран «История» (Рис. 16) должен содержать записи о всех внесенных изменениях показаний счётчиков. Поиск записей в истории будет выполняться по типу услуги, дате и информации об учетной записи. Кнопку открытия экрана «Графики и диаграммы» (Рис. 17) для удобства пользователя следует расположить внизу экрана.
Рис.16 Концепция экран «История»
Рис.17 Концепция экрана «Графики и диаграммы»
В экране «Напоминания» (Рис. 18) следует выводить список всех существующих напоминаний с их описанием. Кнопку добавления напоминаний рациональнее всего расположить внизу экрана. Следует добавить функцию удаления всех напоминаний. Экран изменения и добавления напоминаний (Рис. 19) будет иметь функцию удаления выбранного напоминания.
Рис.18 Концепция экрана «Напоминания»
Рис.19 Концепция экрана «Напоминание»
В экране «Настройки» (Рис. 20) элементы следует располагать по мере важности и по частоте использования.
Рис.20 Концепция экрана «Настройки»
Так как разрабатываемое приложение в основном будет работать с базой данных, необходимо определиться с ее структурой (Рис. 21)
Рис.21 Структура базы данных
База данных состоит из пяти таблиц, не связанных между собой. Таблица «tariffs» хранит имя тарифа и стоимость услуги. В таблице «history» храниться имя услуги, дата добавления показания, значения предыдущего и текущего показаний, стоимость услуги, общая стоимость и информация о пользователе. Таблица «info_user» хранит всю информацию о пользователе — имя, адрес, телефоны. В таблице «selected_user» храниться идентификатор выбранного на главном экране пользователя, а в таблицу «reminders» заноситься информация о напоминании — название, текст, дата и время оповещения.
2.3 Средства разработки приложений
Разработка приложений ведется на языке Java, для этого потребуется специальное программное обеспечение. Самые новые версии системного программного обеспечения, необходимого для поддержки, можно загрузить с сайта http://www.oracle.com. В первую очередь требуется установка JDK (Java Development Kit) — это комплект разработчика приложений на языке Java, содержащий в себе компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты, а также Java Runtime Environment (JRE) — это среда выполнения Java, предназначенная для запуска и исполнения программ. Однако, в состав JDK не входит интегрированная среда разработки на java, поэтому дальше устанавливаем среду разработки.
В среде разработки мы будем создавать программу и получать на выходе готовое приложение. Сейчас существует несколько сред разработки, я выбрала рекомендуемую компанией Google — Android Studio. Эта среда разработки популярна как у новичков, так и среди профессионалов. С ее помощью можно выполнить максимальное количество стандартных задач, которые обычно встают перед программистом в процессе создания приложения. В Android Studio входят встроенные средства для проверки программ на разных версиях операционной системы. Для тех, кто пишет продукты для разных устройств, будь то планшеты, смартфоны или ноутбуки, среда разработки предложит средства автоматической подстройки разрешения и размера элементов. С целью ускорения выполнения работ, Android Studio предоставляет коллекцию элементов для создания интерфейса и встроенный визуальный редактор. Помимо этого, в ней есть возможность предварительного просмотра элементов управления в различных разрешениях. Скачать Android Studio можно с сайта https://developer.android.com. При установке, так же устанавливается AndroidSDK.
AndroidSDK — это набор средств программирования, которые помогают разрабатывать мобильные приложения для платформы Android:
API Android SDK — API библиотеки Android, предоставляемые для разработки приложений (готовые классы, процедуры, функции, структуры и константы).
Документация SDK — включает обширную справочную информацию, детализирующую, что включено в каждый пакет и класс и как это использовать при разработке приложений.
AVD (Android Virtual Device) — интерактивный эмулятор мобильного устройства Android. Используя эмулятор, можно запускать и тестировать приложения без использования реального Android-ycтpoйcтвa.
Development Tools — инструментальные средства для разработки, которые позволяют компилировать и отлаживать создаваемые приложения.
Sample Code — типовые приложения, которые демонстрируют некоторые из возможностей Android, и простые программы, которые показывают, как использовать индивидуальные особенности API в коде.
При запуске AndroidStudio открывается стартовое окно. Для установки, обновления и удаления компонентов SDK выбираем пункт Configure и далее SDK Manager. Открывается SDK Manager (Рис. 22).
Сначала идет папка Tools — в ней находятся утилиты, необходимые для разработки под Android. Далее идет список версий Android. И в самом низу есть папка Extras, в которой обычно находятся дополнительные библиотеки.
Справа от каждого компонента в списке виден его статус: Installed — установлен, Not installed — не установлен, Update available — доступно обновление.
Рис.22 SDKManager
Открываем папки с требующимися версиями Android (Рис. 23).
Рис.23 Компоненты Android SDK
Нам предлагается множество компонентов для установки. Как минимум для разработки нам необходимы два из них:
SDK Platform — используется для разработки. Здесь содержатся все программные компоненты системы Android, которые мы будем использовать при создании приложений — т.е. окна, кнопки и т.п.
ARM EABI v7a System Image — образ Android системы. Используется для создания эмулятора Android, который нужен будет для тестирования приложений прямо на компьютере, без подключения реальных устройств.
После их установки, мы сможем создать приложение, использующее компоненты и возможности Android выбранной версии и запустить это приложение на эмуляторе.
3. Реализация приложения
3.1 Структура проекта
Программа была реализована на языке java в среде разработки AndroidStudio с помощью инструментов для разработки Android SDK. Разработка программы производилась на основе изученных методов разработки приложений для ОС Android [3, 4, 7, 8]. Разработанный проект содержит файлы с исходным кодом на языке Java, представленные на Рис. 24 и файлы с описанием интерфейса программы на языке XML, представленные на Рис. 25.
Каждый файл с исходным кодом содержит реализацию отдельного класса программы. Названия классов соответствуют названиям файлов, в которых они расположены. Все файлы, кроме «BootLoad», «DBCourseWork» и «ReminderNotification» наследуются от базового класса Activity, входящего в комплект средств разработки Android SDK, и реализуют формы приложения. В них изложены алгоритмы взаимодействия пользователя с элементами интерфейса приложения и с базой данных. Вид интерфейса каждой формы описан в соответствующем ей XML файле.
Рис.24 Файлы с исходным кодом
Рис.25 Файлы с описанием интерфейса
Класс «DBCourseWork» реализует адаптер, который используется в других классах приложения. Адаптеры являются объектами, которые соединяют элементы интерфейса и данные для этих элементов. Класс «DBCourseWork» наследуется от базового класса «SQLiteOpenHelper» и реализует взаимодействие с базой данных приложения, включая инициализацию базы данных, подключение к базе данных, создание и обновление таблиц.
Классы «BootLoad» и «ReminderNotification» наследуются от базового класса BroadcastReceiver. Класс «BootLoad» реализует отправление пользователю оповещения в заданное время, а «ReminderNotification» реализует управление уведомлением, которое отображается в строке состояние мобильного устройства.
3.2 Реализация пользовательского интерфейса
Рассмотрим иерархию компонентов (Рис. 26) и вид интерфейса (Рис. 27) на примере экрана «Информация о пользователе».
Экран «Информация о пользователе» представляет собой RelativeLayout, который в свою очередь включает в себя ScrollView и вертикальный LinearLayout. LinearLayout содержит в себе два элемента — Button. ScrollView является наследником класса FrameLayout. Основным отличием является то, что он позволяет прокручивать элементы, если они занимают больше места, чем физический размер экрана. В ScrollView может содержаться только один элемент. В нашем случае это еще один вертикальный LinearLayout, который содержит четыре элемента TextView и столько же элементов EditText.
Рис.26 Иерархия компонентов
Рис.27 Скриншот экрана «Информация о пользователе»
XML-файл описывающий интерфейс данного экрана выглядит следующим образом:
- <RelativeLayout
xmlns:android=»http://schemas.android.com/apk/res/android» xmlns:tools=»http://schemas.android.com/tools»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:layout_margin=»15dp»
tools:context=»course.utilities.User»>
- <ScrollView
android:layout_width=»fill_parent»
android:layout_height=»wrap_content»
android:layout_above=»@+id/linearLayout»
android:layout_alignParentTop=»true»
<LinearLayout
android:layout_width=»fill_parent»
android:layout_height=»wrap_content»
android:orientation=»vertical»>
- <TextView
android:layout_width=»fill_parent»
android:layout_height=»wrap_content»
android:textAppearance=»?android:attr/textAppearanceLarge»
android:text=»ФИО»/>
- <EditText
android:layout_width=»fill_parent»
android:layout_height=»wrap_content»
android:textAppearance=»?android:attr/textAppearanceLarge»
android:id=»@+id/editTextUserFullName»/>
- </LinearLayout>
- </ScrollView>
- <LinearLayout
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»