Дипломная (вкр): Создание мобильного приложения для организации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

полное связывание с нативными SDK - Xamarin содержит привязки почти для всех функций нативных SDK как для мобильной операционной системы iOS, так и для Android. Кроме того, эти привязки строго типизированы, что означает, что по ним легче ориентироваться и использовать, а также обеспечить надежную проверку типа во время компиляции, то есть на этапе разработки. Это приводит к уменьшению количества ошибок во время выполнения и приводит к повышению качества приложений;

интероперабельность c Objective-C, Java, C и C++ - Xamarin предоставляет средства для непосредственного вызова Objective-C, Java, C и C++ библиотек. Это позволяет использовать существующие библиотеки мобильных операционных систем iOS и Android, написанных на Objective-C, Java или C/C++. Кроме того, Xamarin позволяет связывать проекты, что позволяет легко связывать собственные библиотеки Objective-C и Java с использованием декларативного синтаксиса;

современные языковые конструкции - приложения Xamarin написаны на современном языке C;

обширная библиотека базового класса - приложения Xamarin используют.NET BCL (Base Class Library), коллекцию классов, которые имеют функции для работы с XML, базами данных, сериализацией объектов, вводом-выводом, строками и сетью, и другие;

современная интегрированная среда разработки (IDE) - Xamarin использует Xamarin Studio при работе в операционной системе Mac OS X и Visual Studio при работе в Windows. Это современные IDE, которые включают такие функции, как автодополнение кода сложную систему управления, большую библиотеку шаблонов проектов, встроенную поддержку систем контроля версий и многие другие;

кроссплатформенность - Xamarin предлагает поддержку кроссплатформенности для трех основных мобильных платформ iOS, Android и Windows Phone. Приложения могут быть содержать до 90% общего кода, а библиотека Xamarin.Mobile предоставляет унифицированный API для доступа к общим ресурсам на всех трех платформах. Это может значительно снизить затраты на разработку мобильных приложений, ориентированных на три самые популярных мобильных платформы.

Благодаря широкому набору функций Xamarin остается на сегодняшний день единственным выбором для разработчиков мобильных приложений, которые хотят использовать современный высокоуровневый язык программирования C# и платформу для разработки кроссплатформенных мобильных приложений [4].

Используемы для написания приложений на платформе Xamarin язык программирования C# по синтаксису очень похож на язык программирования Java, который используется при традиционной разработке нативных мобильных приложений для платформы Android. Синтаксис C# можно считать надмножеством синтаксиса Java, но с несколькими переименованными и добавленными ключевыми словами.

Многие ключевые характеристики Java можно найти в C#:

основанное на классах объектно-ориентированное программирование;

сильная типизация;

поддержка интерфейсов;

дженерики;

сборка мусора;

компиляция во время выполнения.

И Java, и C# компилируются на промежуточный язык, который запускается в управляемой среде исполнения. Оба C# и Java статически типизированы, и оба языка рассматривают строки как неизменяемые типы. Оба языка используют иерархию классов с одним корнем. Подобно Java, C# поддерживает только одно наследование и не позволяет использовать глобальные методы. На обоих языках объекты создаются в куче с использованием нового ключевого слова, а объекты собираются с мусором, когда они больше не используются. Оба языка предоставляют официальную поддержку обработки исключений с семантикой try/catch. Оба обеспечивают поддержку потоков и поддержку синхронизации.

Однако между Java и C# существует множество различий:

Java не поддерживает неявно типизированные локальные переменные (C# поддерживает ключевое слово var);

в Java вы можете передавать параметры только по значению, в то время как в C# вы можете передавать как по ссылке, так и по значению. (C# содержит ключевые слова ref и out для передачи параметров по ссылке, в Java нет эквивалента);

Java не поддерживает директивы препроцессора, такие как #define;

Java не поддерживает целые типы без знака, в то время как C ulong типы, такие как ulong, uint, ushort и byte;

Java не поддерживает перегрузку оператора; В C# вы можете перегружать операторы и конверсии;

в выражении оператора Java код может попасть в следующий раздел коммутатора, но в C# конец каждого раздела коммутатора должен завершать коммутатор (конец каждого раздела должен завершаться оператором break);

в Java вы указываете исключения, создаваемые методом с ключевым словом throw, но C# не имеет понятия проверенных исключений - ключевое слово throw не поддерживается в C#;

C# поддерживает Language-Integrated Query (LINQ), который позволяет использовать зарезервированные слова from, select и where писать запросы к коллекциям способом, похожим на запросы к базе данных [5].

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

2. Разработка приложения

.1 Описание существующего API

Для взаимодействия с существующими информационными системами предприятия - CRM системой, был предоставлен набор методов для удаленного вызова процедур по протоколу HTTP (HyperText Transfer Protocol) описание которых приведено в таблице 2.1.

Таблица 2.1 - Методы API

Название метода

Метод HTTP

Заголовки

Параметры запроса

Формат ответа

Назначение

getdriver

GET

Authorization


JSON объект

получение данных о пользователе

getdrivers

GET



JSON объект

получение списка пользователей

getorders

GET

Authorization


JSON объект

получение списка заказов

uploadphoto

POST

Authorization, Content-Type: "multipart/form-data"

photo_order, photo

Код состояния HTTP

загрузка файла фотографии


Метод getdriver возвращает JSON объект содержащий данные о пользователе логин и пароль которого были переданы с помощью заголовка Authorization.

Метод getdrivers возвращает JSON объект, содержащий массив доступных пользователей.

Метод getorders возвращает JSON объект, содержащий массив заказов, привязанных к пользователю, логин и пароль которого были переданы с помощью заголовка Authorization.

Метод uploadphoto принимает данные в виде multipart/form-data запроса в котором должны содержаться параметр photo_order, указывающий на номер заказа к которому принадлежит фотография, и photo содержащий снимок в формате base64 и возвращает код HTTP 202 Accepted в случае удачной загрузки фотографии.

.2 Компоненты приложения

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

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

Существует четыре различных типа компонентов приложения:

активности (Activity);

сервисы (Service);

получатели широковещательных сообщений (Broadcast receiver);

поставщики контента (Content provider).

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

2.2.1 Активность

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

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

сохранение списка недавно запущенных активностей, в которые пользователь может в скором времени вернуться для поддержания высокого приоритета сохранения в активном состоянии содержащих их процессов;

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

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

Активности приложения являются наследниками базового класса Activity.

В разработанном мобильном приложении реализовано три класса активности:

StartActivity является точкой входа в приложение. При запуске данной активности проверяется, произведён ли вход пользователя в приложение, на основании чего управление предается в одну из двух следующих активностей;

LoginActivity содержит пользовательский интерфейс и методы для осуществления входа (аутентификации) в приложение;

MainActivity является главной рабочей активностью приложения и контейнером для основных фрагментов.

2.2.2 Сервис

Сервисы являются точкой входа общего назначения для поддержки разного рода фоновых задач приложения. Это компонент, который работает в фоновом режиме для выполнения длительных операций или для вызова удаленных процедур. Сервисы не обладают пользовательским интерфейсом. Сервис может, например, воспроизводить музыку в фоновом режиме, когда пользователь находится в другом приложении, или получать данные по сети, не блокируя при этом взаимодействие пользователя с активностью. Служба может быть запущена другим компонентом, который затем будут взаимодействовать с ней, например, активностью. Сервисы могут принимать две разные формы - запущенные сервисы и привязанные сервисы. Служба является запущенной, когда компонент приложения (например, активность) запускает ее вызовом startService(). После запуска служба может работать в фоновом режиме в течение неограниченного времени, даже если уничтожен компонент, который ее запустил. Обычно запущенный сервис выполняет одну операцию и не возвращает результатов вызывающему компоненту. Например, он может загружать или выгружать файл по сети. Когда операция выполнена, сервис должен остановиться самостоятельно. Синхронизация данных в фоновом режиме или воспроизведение музыки также представляют собой два разных типа запущенных сервисов, которые влияют на способ их обработки системой:

сервис переднего плана - это сервис, о котором пользователь активно осведомлен, и поэтому он не является кандидатом для удаления системой в случае нехватки памяти. Сервис переднего плана должен выводить уведомление в строку состояния. Это уведомление не может быть удалено, пока сервис не будет остановлен или удален с переднего плана;

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

Сервис является привязанным, когда компонент приложения привязывается к нему вызовом bindService(). Привязанный сервис предоставляет клиент-серверный интерфейс, который позволяет компонентам взаимодействовать с сервисом, отправлять запросы, получать результаты и даже делать это между разными процессами посредством межпроцессного взаимодействия (IPC). Привязанный сервис работает только пока к нему привязан другой компонент приложения. К сервису могут быть привязаны несколько компонентов одновременно, но, когда все они отменяют привязку, сервис уничтожается [6].

Сервис реализуется как подкласс базового класса Service.

В приложении используются сервисы, унаследованные от класса IntentService, потомка класса Service упрощающего работу с многопоточностью.выполняет вызов метода getorders API CRM системы для получения списка заказов и сохраняет изменения в базе данных.

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

.2.3 Получатель широковещательных сообщений

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

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

В приложении использовано три подкласса класса BroadcastReceiver.

Источник: https://www.bibliofond.ru/detail.aspx?id=897268