Разработка мобильного приложения для управления умным домом

Операционная система Android как целевая платформа, средства разработки приложений для нее. Описание библиотек Glide и Retrofit. Разработка программы для отображения информации на телефоне. Создание видео модуля и модуля отображения погоды и температуры.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство связи

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«Поволжский государственный университет телекоммуникаций и информатики»

Факультет Информационных систем и технологий

Направление Информатика и вычислительная техника

Кафедра Программного обеспечения и управления в технических системах

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Разработка мобильного приложения для управления умным домом

Разработал Минько Я.С.

Самара 2017

Введение

Главная цель всех технических новинок - сделать жизнь человека максимально комфортной, особенно в рамках жилого пространства. С одной стороны, прогрессивные технологии помогают сделать дом теплым, светлым, энергоэффективным, а с другой, появляется столько подсистем, что подчас управление всей этой инженерией становится непосильной задачей даже для продвинутого пользователя. «Умный дом» - это интеллектуальный комплекс, объединяющий все важные технические системы и предназначенный для того, чтобы управление ими стало простым и удобным.

В настоящее время, почти у каждого человека есть мобильное устройство. Которое, он многократно использует день за днем и уже не представляет себе существование без него. Электронная почти, звонки, социальные сети, видео, аудио, получение огромного количества данных.

В связи с этим стремительно развивается разработка мобильных приложений, для всех нужд. Используя современные инструменты, так же и возрастает количество требований для приложения, такие как: не только интерфейс, но и проста и надежность. Всё больше компаний начинают заниматься создание своих собственных приложений, ведь идет рост развития мобильных платформ.

Мобильные приложения так же затронули и системы управления. Такие, как системы управления умным домом. В Европе уже давно распространены данные системы. Главные факторы этих систем -это удобство, безопасность, экономичность.

Все перечисленное определяет актуальность темы «Разработка мобильного приложения для управления умным домом». На операционной системе Android.

Целью данной выпускной квалификационной работы является разработка мобильного приложения на платформу Android для создания мобильного приложения умный дом. В данном приложении будет отображена информация по включенному и выключенному электроосвещению. Будет отображена информация по температуре и прогнозу погоды.

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

Объектом исследования является программное обеспечение для удаленного доступа .

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

Для достижения цели необходимо выполнить следующие задачи:

1. Изучить технологии для разработки мобильных приложений;

2. Выбрать необходимые средства разработки;

3. Разработать интерфейс приложения;

4. Разработать необходимые модули и структуру их взаимодействия.

В рамках работы была изучена литература таких авторов как, Дон Гриффитс и Дэвид Гриффитс, а так же Б. Харди. Прочитана документации по языку Java, операционной среде Android и созданию приложений для нее, по подключению библиотек через систему автоматической сборки Gradle и работа с библиотекой для загрузки изображений из сети Glide.

Бакалаврская работа состоит из введения, основной части, заключения, списка литературы и приложения.

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

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

В заключение представлены основные выводы по проделанной работе и результаты.

Приложения содержат презентационный материал (Приложение A), исходный код программы (Приложение Б).

android программа телефон информация

1. Теоретическая часть

1.1 Операционная система Android

Android - бесплатная операционная система, основанная на Linux с интерфейсом программирования Java. Операционная система создана альянсом Open Handset Alliance, возглавляемым компанией Google. Для разработки имеются все необходимые инструменты - компилятор, отладчик и эмулятор устройства, а также собственная виртуальная машина Java (Dalvik Virtual Machine -- DVM). Между приложением и ядром существует слой API и слой библиотек на нативном коде.[1]

Dalvik Virtual Machine использует свой особенный байткод. Поэтому у вас не получится запустить стандартный байткод Java на Android. Android предоставляет инструмент «dx», который позволяет конвертировать файлы Java Class в файлы «dex» (Dalvik Executable). Android-приложения пакуются в файлы .apk (Android Package) программой «aapt» (Android Asset Packaging Tool). Для упрощения разработки Google предоставляет Android Development Tools (ADT) для Eclipse. ADT выполняет автоматическое преобразование из файлов Java Class в файлы dex, и создает apk во время развёртывания.

Android поддерживает 2D и 3D-графику, используя библиотеки OpenGL, а также хранение данных в базе данных SQLite.

Каждое Android-приложение запускается в своем собственном процессе и под своим собственным userid, который автоматически генерируется Android во время развертывания. Поэтому приложение изолировано от других запущенных приложений, и неправильно работающее приложение не может беспрепятственно навредить другим Android-приложениям.

Архитектура Android основывается на многократном использовании компонентов, благодаря чему вы можете публиковать Activity (Актикности),Services(Сервисы) и данные, а так же делиться ими с другими приложениями, управляя доступом с помощью определяемой вами политики безопасности. Далее приведу основной список компонентов Android.

Activity (Активность) -- представляет собой схему представления Android-приложений. Каждый экран пользовательского интерфейса представлен классом Activity, по сути отдельная форма приложения. Android-приложение способно состоять из нескольких форм (Activity) и может переключаться между ними во время выполнения приложения[3]

Intents (Намерения) -- асинхронные сообщения, которые позволяют приложению запросить функции из других служб или действий. Приложение может делать прямые запросы службе или действию (явное намерение) или запросить у Android зарегистрированные службы и приложения (неявное намерение). Для примера, приложение может запросить через Intent приложение Контакты для получения данных.

Views (Представление, Вид, Элемент управления) -- пользовательский интерфейс, создаваемый виджетами классов. Это знакомые нам элементы управления: кнопки, текстовые поля, флажки, переключатели и т.п. Схема views управляется через «android.view.ViewGroups».

Services (Службы) -- выполняет фоновые задачи без предоставления пользовательского интерфейса(например, проигрывание музыки). Они могут уведомлять пользователя через систему уведомлений Android.

Content Provider (Контент-провайдеры) -- предоставляет данные приложениям, с помощью контент-провайдера. Ваше приложение может обмениваться данными с другими приложениями. Android содержит базу данных SQLite, которая может выполнять роль контент-провайдера.

Broadcast Receiver (Приемник широковещательных сообщений/запросов) -- принимает системные сообщения и неявные намерения, может использоваться для реагирования на изменение состояния системы. Приложение может регистрироваться как приемник определенных событий и может быть запущено, если такое событие произойдет.[2]

Но по мимо нее надо было установить :

· Саму среду разработки Eclipse;

· JDK;

· Android SDK;

· и специальный плагин для Eclipse.

Но благодаря Google Inc в 2013 была анонсирована своя среда разработки - Android Studio .В 2014 году была выпущена первая стабильная версия и была прекращена поддержка плагина ADT для Eclipse.

И для ее запуска надо было всего:

· Скачать JDK

· Установить Android Studio

· Все необходимые файлы Android Studio скачает сама

Каждое приложение должно иметь свой файл AndroidManifest.xml. Этот файл можно изменять, как в ручную, так и через визуальный редактор(ME-Manifest Editor).

Назначение файла

· объявляет имя Java-пакета приложения, который служит уникальным идентификатором;

· описывает компоненты приложения -- деятельности, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявляет их намерения;

· содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;

· объявляет разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;

· объявляет минимальный уровень API Android, необходимый для работы приложения;

· перечисляет связанные библиотеки;

Cодержание файла AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="yaroslav.smarthouse"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

R.java, Resources и Assets

Каталог «gen» в Android-проекте содержит генерированные значения. «R.java» -- генерированный класс, который содержит ссылки на ресурсы из папки «res» проекта. Эти ресурсы содержатся в директории «res» и могут быть значениями, меню, схемами, иконками или рисунками, или анимациями. Например, ресурсом могут быть рисунок или XML-файлы, содержащие определенные строки.

Если Вы создаете новые ресурсы, то соответствующие ссылки будут автоматически созданы в «R.java». Ссылки являются статическими значениями типа int (целочисленными константами), система Android предоставляет методы доступа к соответствующим ресурсам.[4]Например, для доступа к строке с идентификатором ссылки «R.string.yourString» используйте метод getString(R.string.yourString)); Пожалуйста, не пробуйте изменять «R.java» в ручную.

Тогда как каталог „res“ хранит структурированные значения, известные платформе Android, каталог „assets“ может быть использован для хранения любых данных. В Java Вы можете получить доступ к этим данным через AssetsManager и метод getAssets().

1.2 Описание Библиотек

1.2.1 Библиотека Glide

Для получения картинок с изображениями погоды необходимо подключить библиотеку Glide.Логотип, которой изображен на (рис.1.1).

Рис.1.1 -Логотип библиотеки Glide

Glide - это быстрый и эффективный механизм управления медиафайлами с открытым исходным кодом и графикой загрузки изображений для Android, который включает декодирование мультимедиа, память и кеширование, а также объединение ресурсов в простой и удобный интерфейс. Данная библиотека, используется во многих открытых проектах Google.Ниже приведен их список:

· процесс загрузки выполняется асинхронно;

· кэширование изображения;

· поддержка gif-анимации и видео.

Для установки требуется скачать jar файл или использовать систему Gradle, для автоматической сборки на необходимый текст отображен на (рис 1.2) [5]

Рис.1.2 Cкриншот команд для Gradle

Так же на необходимые команды для автоматической сборк фреймворка Maven продемонстрированы на (рис.1.3).

Рис.1.3- Cкриншот команд для Maven

1.2.2 Библиотека Retrofit

Для получения данных с сайта “openweathermap.org”, необходимо подключить библиотеку Retrofit.

Retrofit это REST (это принцип взаимодействия web-сайта или приложения с помощью протокола HTTP) клиент для android. Так же является одной из самых популярных библиотек. Благодаря удобству и функционалу.

Мы будем использовать ее для загрузки JSON (структура данных) через REST. Retrofit позволяет настроить какой конвертор использовать для сериализации/десериализации данных. Для HTTP запросов будет использоваться библиотека -okhttp, входящая в состав Retrofit.

Преимущества данной библиотеки:

· не нужно выводить запросы к API в отдельный поток;

· сокращает длину кода в следствии чего ускоряет разработку;

· динамические запросы;

· конвертация JSON в объекты ;

· обработка ошибок;

· передача файлов.

Логика работы Retrofit(библиотеки) завязана на аннотациях с помощью них можно создавать запросы к серверу.

В нашем приложении нам важна функция REST API.

REST API определяет набор функций, к которым разработчики могут совершать запросы и получать ответы. Взаимодействие происходит по протоколу HTTP. Преимуществом такого подхода является широкое распространение протокола HTTP, поэтому REST API можно использовать практически из любого языка программирования.[6]

REST API предназначено, в основном, для запросов из приложения к серверам.

REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Главная особенность состоит в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя, а так же необходимые параметры, для выполнения операции.

Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):

1. Получение данных с сервера (обычно в формате JSON, или XML).

2. Добавление новых данных на сервер.

3. Модификация существующих данных на сервере.

4. Удаление данных на сервере.

Операция получения данных не может приводить к изменению состояния сервера.

Для каждого типа операции используется свой метод HTTP-запроса:

1. Получение - GET.

2. Добавление - POST.

3. Модификация - PUT.

4. Удаление - DELETE.

2. Практическая часть

2.1 Разработка требований

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

· работа с удаленной базой данных;

· редактирование базы данных;

· отображение информации с видеокамер;

· получение и обработка данных с метеосайта;

· графическое отображение прогноза погоды на несколько дней;

· получение и отображение температуры с датчиков;

· удаленное управление светом ;

· простой и удобный интерфейс .

Рассмотрим каждое требование, которое было рассмотрено ранее:

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

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

Мгновенное получение информации о прогнозе погоды. С отображением на экране телефона, не выходя из дома. Отображает не только температуру, но атмосферные осадки, если они наблюдаются. Кроме этого отображает прогноз погоды с данного дня и на протяжении последующих пяти дней.

Отображает данную температуру в комнатах, а так температуру на улице в данный момент времени.

Удаленное управление светом, позволяет из любой точки мира посмотреть, а так же выключить, включенный свет в квартире.

2.2 Выбор REST Библиотеки

В поиске сторонних библиотек, которые поддерживают параллельные фоновые потоки, сетевое кэширование, а также другие функции, которые существенно очищают сетевой код. Первой библиотекой, на которую я смотрел, была Volley, библиотека с открытым исходным кодом, написанная Google. В настоящее время он используется в AOSP Android, а также в большинстве приложений сторонних разработчиков Google. Другая библиотека, которую я рассмотрел, была RetroFit данная библиотека с открытым исходным кодом написанная Square.

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

С Volley вы указываете всю конечную точку динамически (параметры и все) во время вызова API. По умолчанию Volley возвращает JSONObject или JSONArray в зависимости от типа запроса.

С другой стороны, для переоснащения вы установили базовый URL-адрес конечной точки для всех вызовов API, тогда у вас есть статические интерфейсы, которые определяют конечные точки с помощью аннотаций Java. Вы можете выполнять чистую и динамическую замену сегментов пути, переменных POST / GET и т. Д. В конечную точку во время вызова API. Чтобы сделать вызов API с помощью RetroFit, вы вызываете метод на интерфейсе, передаете любые подстановки, и он вернет вам объект модели java. По умолчанию Retrofit автоматически обрабатывает JSON, используя GSON (это действительно очень быстро), хотя вы можете подключить свой собственный анализатор JSON, если хотите. Несмотря на то, что настройка немного отличается, фактические вызовы API выполняются аналогичным образом.

Чтобы получить некоторые тесты производительности, был разобран н пример приложения скаченный из интренета, в котором контролировались / моделировались вызовы API реального мира, которые действительно делает Canvas для Android. Это приложении которое позволило мне переключаться между простым API с небольшим разбором JSON и сложным API с длинным ответом. Общее количество вызовов API, которые могут быть сделаны, также может быть изменено в приложении. Был включили точный набор вызовов API, которые Canvas для Android Dashboard делает для более реального теста. Этот тест показал три вещи: 1) они были значительно проще в использовании, чем AsyncTasks, 2) оба они очистили кодовую базу, и 3) они были намного быстрее, чем то, что мы делали в настоящее время. На (рис.2.1 Результаты теста отображены на (рис.2.1).

Рис.2.1 - Результаты теста

Во всех трех тестах с различными повторами (1 - 25 раз), Volley был где-то от 50% до 75% быстрее. Дооснащение увеличилось на впечатляющие 50% -90% быстрее, чем у AsyncTasks, достигнув той же конечной точки столько же раз. В тестовом наборе Dashboard это переведено на загрузку / разбор данных на несколько секунд быстрее. Это огромная разница в реальном мире. Чтобы сделать тесты справедливыми, времена для AsyncTasks / Volley включали разбор JSON, поскольку Retrofit делает это за вас автоматически.

В конце концов, я выбрал Retrofit.

2.3 Среда разработки Android studio

Android Studio - среда разработки под Android, основанная на IntelliJ IDEA. Подобно Android IDE, она предоставляет интегрированные инструменты для разработки и отладки. Дополнительно ко всем возможностям, ожидаемым от IntelliJ, в Android Studio реализованы:

· поддержка сборки приложения, основанной на Gradle;

· специфичный для Android рефакторинг и быстрое исправление дефектов;

· lint инструменты для поиска проблем с производительностью, с юзабилити, с совместимостью версий и других;

· возможности ProGuard (утилита для сокращения, оптимизации и обфускации кода) и подписи приложений;

· основанные на шаблонах мастера для создания общих Android конструкций и компонентов;

· WYSIWYG редактор, работающий на многих размерах экранов и разрешений, окно предварительного просмотра, показывающее запущенное приложение сразу на нескольких устройствах и в реальном времени;

· встроенная поддержка облачной платформы Google.

К обязательным инструментам относится Android SDK - набор средств содержащий инструменты для создания, компиляции и сборки . Окно установщика Jdk изображено на (рис. 2.2)[7]

После jdk следует прописать путь до файлов JDK в путях операционной системы. Это дает возможность запускать основные файлы из командной строки .Так же надо обьявить переменную JAVA_HOME .[8]Для этого надо выполнить ряд следующих действий:

Рис.2.2 -Окно установщика Jdk

1. Выбрать в меню пуск мой компьютер.

2. Затем нажать на клавишу свойства, откроется окно “Системы”.

3. Далее выбираем -Дополнительные параметры системы.

4. Нажимаем на вкладку дополнительно, выбираем переменные среды.

5. В открывшемся окне создаем переменную -- «JAVA_HOME». И редактируем переменную «Path». Для этого нажимаем кнопку «Создать».

6. Создавать переменную «Path» уже не надо,т.к она создана . Так что надо ее найти и нажать кнопку «Изменить». Первое, что надо это ввести строку предварительно поставив «;» после всех путей. И во-вторых -- надо добавить строку «\bin» после.

7. И самое главное не удалять переменные .Так как PATH --содержит важную информацию.

2.4 Web сервер

В настоящее время разработка web - приложений занимает одно из ведущих мест в программировании. Основным языком разработки сайтов является HTML, позволяющий превратить обычный текст в более приятную глазу страницу связанный с другими гиперссылками, но он статичен. Одним из языков, обеспечивающих динамику web - сайтам является PHP, данный язык в настоящее время занимает одно из лидирующих позиций в отрасли сетевого программирования. В сочетании с локальным сервером Apache и базой данных MySQL PHP позволяет создавать полнофункциональные интернет приложения. Но установка и настройка данной связки довольно сложна и трудоемка, в особенности для начинающего разработчика. Для упрощения данной рутины был создан пакет Denwer.

Denwer - программная среда, предназначенная для разработки web-приложений на базе популярного языка программирования PHP, web-сервера Apache и базы данных MySQL на локальном сервере. Данный пакет, также именуемый джентльменским набором web разработчика, был создан в 1999 году группой разработчиков под руководством Дмитрия Котерова как комплекс приложений для web-разработки с автоматизированной установкой и настройкой выше указанных компонентов. Последняя на сегодня версия - Denwer 3. Она включает в себя PHP версии 5.3, Apache 2.2, MySQL 5.5, phpMyAdmin для управления базами данных, системы управления запуском и виртуальными хостами, эмулятор почты и установщик. Также данный комплекс может быть расширен дополнительными модулями PHP и SQL, а также языками Perl и Python, базами данных MS SQL, Postgre SQL и другими компонентами.

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

Любая динамическая часть сайта состоит из сценариев, написанных на каком либо скриптовом языке программирования (в частности PHP). Текст данного сценария может быть написан в любом текстовом редакторе без форматирования документа. После этого он и связанные с ним файлы помещается в папку хоста (localhost или любой другой созданный вами хост) и вызывается из браузера. После этого интерпретаторы обрабатывают файлы вашего проекта, и браузер отображает получившуюся страницу. Создание базы данных можно произвести через оболочку phpMyAdmin, либо через написанный вами SQL-скрипт с помощью консольной версии MySQL.

Установка Денвера обычно занимает пару минут, чего не скажешь об установке его составляющих компонентов по отдельности. Перед установкой обычно рекомендуется проверить работоспособность локального хоста ОС, это делается командой ping 127.0.0.1 из консоли. Для установки Денвера требуется скачать дистрибутив и запустить его. После этого будет выведена консоль установки, где будет предлагаться либо продолжить установку, либо выход из установщика, выбираем продолжить. Дальше у вас попросят указать путь установки (по умолчанию это с:\webservers), рекомендуется устанавливать на отдельный логический диск. После вас попросят указать обозначение виртуального диска (обычно Z), главное чтобы оно не было задействовано. И напоследок вы должны выбрать, когда должен создаваться виртуальный диск, при загрузке Windows или при запуске Денвера, рекомендуется первое. По завершению установки на рабочий стол будут выведены ярлыки для запуска, остановки и перезагрузки Денвера. После рекомендуется проверить работоспособность, нажав на ярлык Start Denwer и написав в адресной строке браузера URL: http://localhost/denwer/, после будет выдано сообщение об успешном запуске.

Я пришел к выводу, что денвер хороший выбор для начинающего web-разработчика. Также путем индивидуальных настроек можно создать среду, близкую к выбранному вами хостингу. Основным недостатком данного пакета является отсутствие в сборке интерактивного отладчика, позволяющего построчно прогонять разрабатываемый код.

3. Разработка

3.1 Разработка интерфейса

Окно запуска интегрированной среды разработки изображено на (рис. 3.1)

Рис. 3.1 - Окно запуска Android Studio

После загрузки Android Studio мы увидим окно проектов (рис 3.2)

Рис. 3.2 - Окно проектов

В котором нажимаем создать новый проект «Start a new Android Studio project».[9]Появится окно для создания нового проекта (рис. 3.4), где необходимо заполнить обязательные поля. Жмем Next и заполняем поля. Указываем имя проекта и создателя. А так же можно указать папку где этот проект храниться.

Рис. 3.3 - Форма проекта

Потом выбираем активность пустую активность (Empty activity) и нажимаем далее. Нажав на клавишу Finish, откроется только, что созданный проект . Далее создаем дизайн приложения (рис.3.4).

Рис. 3.4 - Дизайн стартовой страницы.

Дальнейшее описание содержится в пункте 3.2,3.3,3.4.

3.2 Разработка взаимодействия

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

На (рис.3.5) представлена схема взаимодействия Activity в приложении.

Рис.3.5 - Структурная схема

При запуске разрабатываемого приложения загружается MainActivity и отображается окно выбора для запуска одного из модулей.Далее пользователь сам выбирает какой модуль ему открыть.

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

Если же пользователь выберет модуль отображения видео сигнала(Mybrowser). То пользователь увидит две видео камеры, которые отображают в режиме реального времени лестничную площадку и двор.

Далее при выборе пользователем модуля отображения погоды и данных с температурных датчиков. Отобразиться активность Weather,на которой пользователь после нажатия клавиши “Обновить” отображается информация о погоде на нынешний день, в виде изображения “метео cостояния “,а так же с температурой. Кроме этого отобразиться прогноз погоды на следующие пять дней .Загрузиться информация с датчика расположенного в квартире и датчика расположенного за окном и предоставляют данные о температуре и давление.

3.3 Разработка видео модуля

Для создания и тестирования данного модуля использовались две аналоговые камеры подключенные к онлайн сервису.В следствии чего было принято решение использовать публичный класс WebView. Данный класс используется для создания собственного веб-браузера на Android . Он использует механизм визуализации WebKit для отображения веб-страниц и включает в себя методы перемещения вперед и назад по истории, увеличению и уменьшению масштаба, выполнению текстовых запросов и прочее. Главное это добавить разрешения INTERNET к файлу манифеста Android, что бы активность имела доступ к интернету и загружала страницы в WebView. Добавим строку :

“<uses-permission android:name="android.permission.INTERNET" />” в файл манифеста.[10]

Вследствие чего файл манифеста примет вид:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="yaroslav.diplom">

<uses-permission android:name="android.permission.INTERNET" />

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/Theme.AppCompat.NoActionBar">

<activity android:name=".MainActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

Далее выберем откроем файл с xml активностью и разместим два элемента WebView и два элемента TextView для отображения названий расположения камер. Далее зайдем в MainActivity.java и обьявим компонент WebView и инициализируем его:

mWebView = (WebView) findViewById(R.id.web);

// включаем JS mWebView.getSettings().setJavaScriptEnabled(true); //

указываем cсылку на страницу трансляции

mWebView.loadUrl("https://open.ivideon.com/embed/v2/?server=100-e6bd 9160833af7298nb58c2&camera=0&width=&height=&lang=ru&ap=&noibw=");

Повторно выполняем действия со вторым WebView .Далее заходим в файл xml активности и выбираем нужный нам размер.

После запускаем приложение в эмуляторе андроид и получаем данное отображение, как на (рис.3.6), где отображен готовый модуль.

Рис.3.6 - Видео модуль

На данном рисунке прекрасно видно вид на парку около дома, а так же

отображена лестничная площадка. Что позволяет нам не выходя из дома узнать количество свободных мест для авто во дворе, а так же уточнить погоду .Так же видно кто зашел к вам в подъезд, что уменьшает шанс совершения преступлений.

3.4 Разработка модуля отображения погоды и температуры

Для разработки данного модуля нужно прописать три строки в инструмент сборки под название Gradle. Для подключения нужных нам библиотек.

Gradle - это инструмент сборки, который заменяет скрипты сборки на основе XML внутренним DSL, который основан на языке программирования Groovy.Данная система построена на принципах Apache Ant и Apache Maven. В Android Studio, Gradle, сопровождает во время разработки постоянно.

Gradle не является изобретением для Android Studio, система была разработана раньше и использовалась в приложениях для Java и Scala

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

Для подключения библиотеки Gradle надо всего добавить пару строк и библиотека сама скачается и установиться .Для этого надо зайти в корень папки Gradle Scripts и открыть файл build.gradle мы увидем (рис.3.7)

Рис.3.7 - Структура файла build.gradle

Прописываем данные ниже строчки в dependencies.

compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.squareup. retrofit2:converter-gson:2.2.0' compile 'com.github.bumptech.glide:glide:3.7.0'

В результате получаем такой код, как на (рис.3.8) и в течении пары секунд, загружаются и устанавливаются нужные нам библиотеки, такие как Retrofit, Glide.

Рис.3.8 - Отображение кода в файле build.gradle

Далее создадим макет данного модуля, состоящего из:

· 2 х LinearLayout( горизонтальных)

Отображает вывод

· ImageView

Выводит изображение загруженное с сайта openweathermap.org

· 3 х TextView

Выводит текст.

· Button

Загружает и отображает информацию о прогнозах, а так же отображает информацию с датчиков.

Создадим макет модуля Weather (рис.3.9)

Создадим модель для прогноза погоды на сегодняшний день использую Retrofit

Рис.3.9 - Макет модуля Weather

В файл Day напишем:

public class Day {

public class WeatherTemp {

Double temp;

Double min;

Double max;

}

public class Description {

String icon;

}

@SerializedName("main")

private Temp temp;

@SerializedName("weather")

private List<WeatherDescription> desctiption;

@SerializedName("name")

private String city;

@SerializedName("dt")

private long timestamp;

public Day(WeatherTemp temp, List<Description> desctiption) {

this.temp = temp;

this.desctiption = desctiption;

}

public DateK getDate() {

DateK date = Calendar.getInstance();

date.setTimeInMillis(timestamp * 1000);

return date;

}

public String getTemp() { return String.valueOf(temp.temp); }

public String getMin() { return String.valueOf(temp.temp_min); }

public String getMax() { return String.valueOf(temp.temp_max); }

public String getTempInteger() { return String.valueOf(temp.temp.intValue()); }

public String getTempWithDegree() { return String.valueOf(temp.temp.intValue()) + "\u0B0"; }

public String getCity() { return city; }

public String getIcon() { return desctiption.get(0).icon; }

public String getIconUrl() {

return "http://openweathermap.org/img/w/" + desctiption.get(0).icon + ".png";

}}

Далее напишем в файл Forecast, прогноз на 5 дней:

public class WeatherForecast {

@SerializedName("list")

private List<WeatherDay> items;

public WeatherForecast(List<WeatherDay> items) {

this.items = items;

}

public List<WeatherDay> getItems() {

return items;

}

}

Далее надо зайти на сайт (openweathermap.org) и зарегистрироваться и получить API_KEY.

Запишем в файл Api данный код с полученным ключом.

public class \API {

public static String KEY = " ee4cd298727eeac92bdc3d83ea1ca8b8 ";

public static final String URL = "http://api.openweathermap.org/data/2.5/";

private static Retrofit retrofit = null;

Создадим публичный интерфейс с командами запроса Retrofit

@GET("weather")

Call<Day> getToday(

@Query("lat") Double lat,

@Query("lon") Double lon,

@Query("units") String units,

@Query("appid") String appid

@GET("forecast")

Call<WeatherForecast> getForecast(

@Query("lat") Double lat,

@Query("lon") Double lon,

@Query("units") String units,

@Query("appid") String appid

Запишем данный код в файл weather.java

package yaroslav.smarthouse; import android.content.Context; import android.icu.text.SimpleDateFormat; import android.icu.util.Calendar; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.text.*; import com.bumptech.glide.Glide; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MainActivity extends AppCompatActivity { String TAG = "WEATHER"; TextView tvTemp; TextView textView3; TextView textView5; ImageView tvImage; LinearLayout llForecast; WeatherAPI.ApiInterface api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvTemp = (TextView) findViewById(R.id.tvTemp); tvImage = (ImageView) findViewById(R.id.ivImage); llForecast = (LinearLayout) findViewById(R.id.llForecast); api = WeatherAPI.getClient().create(WeatherAPI.ApiInterface.class); } public void getWeather(View v) { Double lat = 55.3; Double lng = 54.5; String units = "metric"; String key = WeatherAPI.KEY; Log.d(TAG, "OK"); Call<WeatherDay> callToday = api.getToday(lat, lng, units, key); callToday.enqueue(new Callback<WeatherDay>() { @Override public void onResponse(Call<WeatherDay> call, Response<WeatherDay> response) { Log.e(TAG, "onResponse"); WeatherDay data = response.body(); if (response.isSuccessful()) { tvTemp.setText(data.getCity() + " " + data.getTempWithDegree()); Glide.with(MainActivity.this).load(data.getIconUrl()).into(tvImage); } } @Override public void onFailure(Call<WeatherDay> call, Throwable t) { Log.e(TAG, "onFailure"); Log.e(TAG, t.toString()); } }); Call<WeatherForecast> callForecast = api.getForecast(lat, lng, units, key); callForecast.enqueue(new Callback<WeatherForecast>() { @Override public void onResponse(Call<WeatherForecast> call, Response<WeatherForecast> response) { Log.e(TAG, "onResponse"); WeatherForecast data = response.body(); if (response.isSuccessful()) { SimpleDateFormat formatDayOfWeek = new SimpleDateFormat("E"); ActionBar.LayoutParams paramsTextView = new ActionBar.LayoutParams( ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT); ActionBar.LayoutParams paramsImageView = new ActionBar.LayoutParams(convertDPtoPX(40, MainActivity.this), convertDPtoPX(40, MainActivity.this)); int marginRight = convertDPtoPX(15, MainActivity.this); ActionBar.LayoutParams paramsLinearLayout = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT); paramsLinearLayout.setMargins(0, 0, marginRight, 0); llForecast.removeAllViews(); for (WeatherDay day : data.getItems()) { if (day.getDate().get(Calendar.HOUR_OF_DAY) == 15) { String date = String.format("%d.%d.%d %d:%d", day.getDate().get(Calendar.DAY_OF_MONTH), day.getDate().get(Calendar.WEEK_OF_MONTH), day.getDate().get(Calendar.YEAR), day.getDate().get(Calendar.HOUR_OF_DAY), day.getDate().get(Calendar.MINUTE) ); Log.d(TAG, date); Log.d(TAG, day.getTempInteger()); Log.d(TAG, "---"); LinearLayout childLayout = new LinearLayout(MainActivity.this); childLayout.setLayoutParams(paramsLinearLayout); childLayout.setOrientation(LinearLayout.VERTICAL); TextView tvDay = new TextView(MainActivity.this); String dayOfWeek = formatDayOfWeek.format(day.getDate().getTime()); tvDay.setText(dayOfWeek); tvDay.setLayoutParams(paramsTextView); childLayout.addView(tvDay); ImageView ivIcon = new ImageView(MainActivity.this); ivIcon.setLayoutParams(paramsImageView); Glide.with(MainActivity.this).load(day.getIconUrl()).into(ivIcon); childLayout.addView(ivIcon); TextView tvTemp = new TextView(MainActivity.this); tvTemp.setText(day.getTempWithDegree()); tvTemp.setLayoutParams(paramsTextView); childLayout.addView(tvTemp); llForecast.addView(childLayout); } } } } @Override public void onFailure(Call<WeatherForecast> call, Throwable t) { Log.e(TAG, "onFailure"); Log.e(TAG, t.toString()); } }); textView3 = (TextView) findViewById(R.id.textView3); textView3.settext(changeTemp1()); textView5 = (TextView) findViewById(R.id.textView5); textView5.settext(changeTemp2()); } public int convertDPtoPX(int dp, Context ctx) { float density = ctx.getResources().getDisplayMetrics().density; int px = (int)(dp * density); return px; } }

В результате получаем (рис.3.10), где изображен готовый модуль .

Рис.3.10 - Модуль отображения погоды

3.5 Разработка модуля управления света

Для создания данного модуля зайдем в структуру проекта и выберем активность с названием “Light”.

Далее создадим макет, который будет отображен пользователю (рис.3.11),где отображены названия комнат. А так же кнопки с переключение работы лампочек.

Рис.3.11 - Макет структуры Light

Для отображения состояния используется элемент ImageButton. Для отображения данных рисунков рис.3.12 и рис 3.13,редактируем иконки в нужный нам размер в любом удобном редакторе, помещаем данные иконки в папку res/drawable и прописываем ниже размещенный код.

Рис.3.12 - “Лампочка выключена”

Рис.3.13 -“Лампочка включена”

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageButton = (ImageButton)findViewById(R.id.imageButton); imageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

changeLED(); // Работа данного модуля описана далее. // меняем if (flag) imageButton.setImageResource(R.drawable.d); else // возвращаем imageButton.setImageResource(R.drawable.l); flag = !flag; } });

Данный код заменят картинку состояния выключено в состояние включено.

Далее создаем метод отправки данных на сервер.

public void changeLED()

{

try

{

URL url1 = new URL("http://192..168.1.1.69/led.php");

HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();

try {

InputStream in = new BufferedInputStream(urlConnection.getInputStream());

}

finally {

urlConnection.disconnect();

}

}

catch (Exception e){}}

И выполняем данные действия с каждым элементом ImageButton.

Заключение

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

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

1.Отображение информации с видеокамер.

2.Получение и отображение температуры с датчиков.

3.Получение и отображение прогноза погоды.

4.Удаленное управление светом.

В ходе разработки проекта были изучены методы разработки приложений для операционной системы Android. Была так же изучена документация по Java, и API. Что позволило создать функционал приложения.

В будущем будет добавлена статистика энергопотребления. Будут добавлены датчики дверей и окон. А так же датчики защиты от пожара и протечек. В следствии этого ожидается прирост пользователи.

Размещено на Allbest.ru


Подобные документы

  • Структура Android-приложений. Особенности игрового движка. Алгоритмизация и программирование. Список игровых состояний. Настройка, отладка и тестирование программы. Разработка руководства пользователя. Тестирование инсталляции и отображения элементов.

    дипломная работа [4,5 M], добавлен 19.01.2017

  • Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

    курсовая работа [987,1 K], добавлен 27.06.2019

  • Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.

    дипломная работа [1,6 M], добавлен 08.07.2015

  • Разработка открытой мобильной платформы Android. Первое устройство, работающее под управлением Android. Магазин приложений "Google Play". Полноценные программы навигации, редакторы офисных документов и синхронизационные утилиты. Рост вирусной активности.

    презентация [58,8 K], добавлен 29.10.2014

  • Первое устройство, работающее под управлением Android. Приложения под операционную систему Android. Формат установочных пакетов. Разработка приложений на языке Java. Шаблоны основных пакетов и компонентов Android. Сборка приложений, основанная на Gradle.

    курсовая работа [492,0 K], добавлен 08.02.2016

  • Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.

    дипломная работа [1,0 M], добавлен 11.07.2014

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Представление о системе Arduino. Структура платформы Android. Выбор средств разработки. Разработка структур данных и алгоритмов. Характеристика Bluetooth модуля, блок реле, резисторов, диодов. Графический интерфейс приложения. Написание кода программы.

    дипломная работа [4,0 M], добавлен 19.01.2017

  • Обзор существующих популярных программ для просмотра погоды на ОС Android. Операционные системы современных смартфонов. Ключевые особенности Android, технология Java. Разработка программной части, выбор языка, описание алгоритма, ее логической структуры.

    курсовая работа [911,5 K], добавлен 16.04.2014

  • Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.

    дипломная работа [1,6 M], добавлен 17.06.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.