Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программная реализация




Создание приложения для Android

Перед тем как создать своё первое приложение, можно создать виртуальное Android-устройство, чтобы быстро тестировать на нём свой свеженаписанный софт. Android Virtual Device (AVD) - это виртуальный смартфон с ОС Android, на котором с легкостью можно запускать созданную нами программу. Как можно заметить, преимущество Android Virtual Device состоит в том, что наглядно можно увидеть как будет работать наша программа на разных смартфонах с Android, а не покупать весь модельный ряд и тестировать приложение на каждом из них.

Приступим к созданию виртуального устройства Android. Следуем в меню по пути Window → Android SDK and AVD Manager.

Выбираем New в правой части окна, в появившемся окне вписываем имя виртуального устройства, платформу (допустим Android 2.1), размер карты памяти (допустим 512 Mb), тип дисплея (допустим HVGA). Затем жмем внизу на кнопку Create AVD.

Теперь создадим проект. Для этого идем по пути в меню File → New → Other, в появившемся списке Android → Android Project.

· Project Name - имя которое будет отображаться в проводнике. Но не на самом устройстве.

· Contents - контент. Здесь мы задаем место где будет храниться проект. Так как этот проект новый надо установить переключатель на Create new project in workspace. Также вы можете выбрать путь где будет хранится наш проект сняв галочку с Use default location.

· Build Target - здесь мы можем установить для какой версии Android будет скомпилировано наше приложение. Я всегда беру версию Android 2.1. Так как её будут поддерживать все устройства работающие на этой версии и выше.

· Application Name - это название приложения будет отображаться на телефоне.

· Package name - надо ввести имя пакета. Так как мы будем программировать на Java мы должны ввести имя пакета удовлетворяющего пространству имен этого языка. Выглядит это так: com.название компании.название приложения. Вместо названия компании и приложения можно ввести что угодно (любые слова).

· Create Activity - создать деятельность.Он служит для создания класса запуска Activity по умолчанию.

*Деятельность - это центральный компонент платформы Android. Это как задачи на Windows. Каждое приложение выполняет определённую задачу на определённом экране пользовательского интерфейса. У нас пока будет только одна деятельность YourActivity

В проводнике появился наш проект. Раскроем его и все его вкладки.

· AndroidManifest.xml - основной файл (файл манифеста) приложения. В нем находится и редактируется конфигурация приложения

· default.propretis - это файл сборки который использует Eclipse. Его нельзя редактировать

· /src - папка где хранится исходный год приложения

· /src/com.feel.you/youactivity.java - главная точка входа приложения (запуск по умолчанию) назначенная в файле манифеста.

· /gen/com.feel.you/R.java - этот файл генерируется автоматически. Служит для управления ресурсами телефона при работе приложения. Его не нужно редактировать.

· /assets - папка для хранения нескомпилированных файлов ресурсов проекта

· /res - папка в которой находятся все ресурсы приложения. Иконки, картинки, анимация, музыкальные файлы и т.д.

· /res/drawble - ldpi - находятся маленькие графические ресурсы приложения; mdpi -находятся средние графические ресурсы и hdpi - находятся большие графические ресурсы приложения

· /res/layout/main.xml - файл макета экрана. Используется деятельностью для прорисовки экрана

· /res/values/strings.xml - строковые ресурсы приложения

Файл манифеста:

· Manifest - Манифест. На этой вкладке определяются общие параметры приложения. Версия приложения например.

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

· Permissions - Разрешения. на этой вкладке определяются права приложения.

· Instrumentation - Инструментарий. Эта вкладка используется для тестирования компонентов приложения с помощью Android SDK

· AndroidManifest.xml - это редактор исходного кода вручную.Точнее всего файла манифеста.

Компоненты:

Системные функции Android:

У Android есть одна ключевая особенность. Он может "заимствовать" некоторые элементы другого приложения. Каждое запущенное приложение Android работает в собственном секторе процессора Android. Это нужно для реализации многозадачности. Процессор выкидывает менее важные приложения чтобы освободить память для работы более важных приложений и процессов. Каждому приложению в Android OS присваивается уникальный Linux ID. По этому ID приложение определяется в системе и ему выставляются определённые разрешения и права. Каждый процесс запускается и имеет собственную виртуальную машину, поэтому приложение выполняется отдельно от других приложений. Приложения Android не имеют единственной точки входа (начала) приложения. Поэтому приложения состоят из так называемых КОМПОНЕНТОВ, код которых система может запускать и выполнять в любом порядке по необходимости.

Рассмотрим четыре компонента:

Activities - Деятельности - Одна деятельность = Одна задача. Деятельность представляет собой интерфейс приложения. Приложение может состоять из одной деятельности или более, но все деятельности идущие после основной становятся субклассами базового класса Activity

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

Intent - Интент (Цель, Намерение) - Это цель выполнить определённое

действие. С помощью интента можно:

· запустить деятельность

· запустить службу

· ответить или набрать номер

· передать широковещательное сообщение

 

Services - Службы - работают в фоновом режиме. У каждой службы есть своя цель в приложении. Они запускаются по запросу пользователя или приложения на неопределенный промежуток времени. Например у нас играет плеер. Мы хотим закрыть плеер и посмотреть E-mail. Поэтому деятельность вызывает службу фонового воспроизведения и плеер играет в фоне. Каждая служба наследуется от базового класса Service.

Broadcast Recivers - Подписчики широковещательных сообщений - это сообщения очень похожи на СМС. Когда кончается заряд батареи, например, выскакивает сообщение "Включить режим энергосбережения?". Но у этих сообщений есть одна особенность они могут запускать деятельности. Приложение может иметь любое число подписчиков. Все подписчики наследуются от базового класса BroadcastReceiver.

Content Providers - Поставщики содержимого - делают специальный набор данных приложении доступным для других приложений. Данные могут храниться файловой системе, в SQLite базе данных, или в любой другой подходящей форме. Поставщики наследуются от базового класса ContentProvider, реализующего стандартный набор методов для получения и сохранения данных заданного типа. Однако, приложение не может вызывать эти методы напрямую. Вместо этого они используют ContentResolver объект и его методы.

На платформе android необходимо определить пользовательский интерфейс для каждой деятельности, используя иерархии узлов view и viewgroup, как показано на рисунке 4.

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

Класс viewgroup служит ядром для подклассов, называемых разметками (layouts), которые формируют расположение элементов пользовательского интерфейса на форме, использую различные виды архитектуры разметки – фреймовый, линейный, табличный и относительный.

Рис. 1 пример дерева представлений для деятельностей

 

Главная деятельность (Main Menu)

Рассмотрим структуру главной деятельности.

Рис. 2 Главное окно программы

Рисунок 3 отображает иерархию разметки главного окна программы и её свойства.

Рис. 3 Иерархия разметки главного окна.

Как видно из рисунка конечными элементами разметки, которые видит пользователь, являются следующие элементы: текстовое поле (title), 3 кнопки (button_map, button_poi, button_exit) (рисунок 4).

Рис.4 Элементы разметки

При нажатии на кнопку <map> открывается активити содержащую карту Google map.

При нажатии на кнопку <poi> открывается активити содержащее список групп туристических объектов города.

При нажатии на кнопку <exit> программа закрывается.

 

Деятельность map

Рассмотрим структуру деятельности map. Внешний вид окна представлен на рисунке 5.

Рисунок 8 отображает иерархию разметки окна map.

Рис.5 Иерархия разметки окна map

При нажатии на кнопку <menu> мобильного устройства, на экране появляется меню из четырех пунктов poi, add objects, search, exit.

При выборе пункта poi открывается активити, содержащее список групп туристических объектов города.

При выборе пункта add objects открывается всплывающее окно содержащее список групп объектов, которые можно отобразить на карте при активации чекбокса (рисунок 6).

При нажатии на маркер объекта появляется всплывающее окно с краткой информацией об объекте.

Рис. 6 Выбор и отображение групп объектов на карте.

При выборе пункта search появляется всплывающее меню с двумя кнопками (search by address, search by coordinates) (рисунок 7).

Рис. 7 Всплывающее меню search

При нажатии на кнопку <Search by address> открывается форма, содержащая два поля (street и house) и две кнопки (Ok и Cancel). При нажатии на кнопку Ok на карте отображается маркер, соответствующий введенному адресу (рисунок 8).

Рис. 8 Поиск по адресу

При нажатии на кнопку <Search by coordinates> открывается форма, содержащая два поля (Latitude и Longitude) и две кнопки (Ok и Cancel). При нажатии на кнопку Ok на карте отображается маркер, соответствующий введенным координатам (рисунок 9).

Рис. 9 Поиск по координатам

 

При выборе пункта меню exit программа закрывается.

Деятельность poi

Рассмотрим структуру деятельности poi. Внешний вид окна представлен на рисунке 10.

Рис. 10 Окно poi

Рисунок 11 отображает иерархию разметки окна poi.

Рис. 11 Иерархия разметки окна poi

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

При нажатии на какой-либо элемент списка открывается активити, содержащее список всех объектов выбранной группы. Например, при выборе элемента theaters открывается активити theatersviewactivity.

Деятельность TheatersViewActivity

Рассмотрим структуру деятельности TheatersViewActivity. Внешний вид окна представлен на рисунке 12.

Рис. 12 Окно TheatersViewActivity

Рисунок 13 отображает иерархию разметки окна TheatersViewActivity.

Рис. 13 Иерархия разметки окна TheatersViewActivity.

Как видно из рисунка конечными элементами разметки, которые видит пользователь, является список listview содержащий текстовые поля с названиями и адресами объектов.

При нажатии на какой-либо элемент списка открывается всплывающее окно с двумя кнопками (add on map, information) (рисунок 14).

Рис. 14 Всплывающее окно TheatersViewActivity

При нажатии на кнопку < add on map > объект отображается на карте (рисунок 15).

Рис. 15 Отображение объекта на карте

При нажатии на кнопку <information> открывается всплывающее окно с краткой информацией (название, адрес, время работы, описание объекта)

Деятельности MuseamViewActivity, ArhitectureViewActivity, InterestViewActivity, TemplesViewActivity, HostelViewActivity устроены аналогичным образом (рисунок 16)

Рис. 16 Деятельности MuseamViewActivity, ArhitectureViewActivity, InterestViewActivity, TemplesViewActivity, HostelViewActivity

 

 

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

Прежде чем Android запустит компонент приложения, он должен узнать, что этот компонент существует. Поэтому приложения объявляют свои компоненты в файле манифеста AndroidManifest.xml, который представляет основную информацию системе.

Структура файла AndroidManifest.xml

Элемент <manifest> является корневым элементом файла.

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

package= "com.touristmap" android:versioncode= "1" android:versionname= "1.0." >

Элемент <uses-sdk> позволяет объявлять совместимость приложения с указанной версией (или более новыми версиями API) платформы Android. Уровень api, объявленный приложением, сравнивается с уровнем API системы мобильного устройства, на который инсталлируется данное приложение.

<uses-sdk android:minsdkversion= "8" />

8 версия sdk означает, что приложение будет откомпилировано с использованием библиотек android 2.2.

Элемент <uses-permission> запрашивает разрешения, которые приложению должны быть предоставлены системой для его нормального функционирования.

Использование доступа к интернету:

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

Разрешение приложению доступа к данным о местоположении, предоставляемым сетью wi-fi или сотовой сетью, которые получаются через класс geolocation:

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

 

Разрешает приложению доступ к данным gps через класс geolocation.

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

 

Элемент <application> - это элемент манифеста, содержащий описание компонентов приложения, доступных в пакете. Этот элемент содержит дочерние элементы, которые объявляют каждый из компонентов, входящих в состав приложения.

Элемент <activity> объявляет деятельность. Все деятельности должны быть явно представлены отдельными элементами <activity> в файле манифеста.

Пример задания деятельности:

<activity android:name= ".activities.mapsactivity"

android:label= "map" />

 

<activity android:name= ".activities.objectseditoractivity"

android:label= "objects" >

</activity>

элемент <provider> объявляет контент-провайдера.

Пример задания контент-провайдера:

<provider android:name= ".providers.objectviewprovider"

Android:authorities= "com.touristmap.objectviewprovider" >

</provider>

Элемент <uses-library> определяет общедоступную библиотеку, с которой должно быть связано приложение.

<uses-library android:name= "com.google.android.maps" />

 

Каталог ресурсов

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

Подкаталог res/layout/

В эту папку помещаются файлы разметки.

Файлы разметки.

Разметка – это архитектура расположения элементов интерфейса пользователя для конкретного окна, представляющего деятельность. Самый общий способ определять разметку и создавать иерархию представления – в xml-файле разметки. Преимущество объявления пользовательского интерфейса в xml-файле состоит в том, что это дает возможность определить представление приложения от программного кода, который управляет поведением приложения. Общая структура xml-файла – это дерево xml элементов, где каждый узел представляет имя класса view.

Файл main.xml

Файл main.xml является файлом разметки для главного активити MainActivity. Корневым элементом данного файла является <tablelayout>

 

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

android:orientation= "vertical"

android:layout_width= "fill_parent"

android:layout_height= "fill_parent" >

 

У данного элемента существует 3 дочерних элемента <button>

<button

android:id= "@+id/button_map"

android:text= "map"

android:layout_width= "wrap_content"

android:layout_height= "wrap_content />

 

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

Android:id= "@+id/button_map" – определяет идентификатор объекта, по которому связывается объект из файла разметки с объектом view в коде программы. Символ + (@+id) означает, что это новое имя ресурса, которое должно быть создано и добавлено к ресурсам в файл r.java, который среда android автоматически генерирует для проекта.

Файлы map.xml, object_info.xml, object_menu.xml, object_view.xml, objects.xml, search_address.xml, search_coord.xml, search_menu.xml, search.xml устроены аналогичным образом.

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

Public void onCreate(Bundle savedinstancestate) {

super. onCreate(savedinstancestate);

SetContentView(R.layout. main);

 

Подкаталог res/drawable/

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

Подкаталог res/values/

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

<string name= "app_name" >TouristMap</string>

 

Файлы деятельностей

Каждый файл деятельности содержит класс, в который добавляется код, реализующий логику работы приложения в данной деятельности. В каждом из таких классов обязательно определяется метод обратного вызова onCreate(), который вызывается системой для прорисовывания окна деятельности на экране устройства.

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

final Button button_map = (Button) findViewById (R.id. button_map);

button_map.setOnClickListener(new View.OnClickListener() {

 

@Override

public void onClick(View v) {

Intent mapsActivity = new Intent(MainActivity. this,MapsActivity. class);

startActivity(mapsActivity);

 

}

});

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

Файл MapsActivity.java описывает функционал для работы с картой:

· Отображение карты (получение контроля над картой, определение вида отображения карты, добавление кнопок масштабирования, загрузка слоев)

super. onCreate(savedInstanceState);

setContentView(R.layout. map);

myMapView = (MapView) findViewById(R.id. mapView);

mapController = myMapView.getController();

myMapView.setStreetView(true);

myMapView.setBuiltInZoomControls(true);

mapOverlays = myMapView.getOverlays();

mapController.setCenter(START_POINT);

mapController.setZoom(12);

MapOverlay mapOverlay = new MapOverlay();

List<Overlay> listOfOverlays = myMapView.getOverlays();

listOfOverlays.clear();

listOfOverlays.add(mapOverlay);

· Создание всплывающего меню в процедуре onCreateOptionsMenu(Menu menu). Создание обработчика событий выбора пункта меню onOptionsItemSelected(MenuItem Item).

· Создание всплывающих диалогов поиска и добавления групп объектов на карту.

· Процедура добавления группы объектов на карту AddGroup(Uri uri, Drawable drawable)

· Процедура добавления точки на карту isAddLocationPoint(double netlat, double netlng, String name)

· Процедуры вызова диалогов поиска CallSearchAddressDialog(), CallSearchCoordDialog()

 

 

В файле ObjectsEditorActivity.java описывается функциональность окна poi:

· Создается список групп объектов

· Создание обработчика событий выбора элементов списка (групп объектов), а именно переходы на новые активити содержащие списки объектов данной группы.

В файле TheatersViewActivity.java описывается функциональность окна theaters:

· Создается список объектов, данные о которых берутся из соответствующей базы данных

· Создание обработчика событий выбора элементов списка

· Процедура добавления объекта на карту CallViewOnMap()

· Процедура отображения диалога с информацией об объекте CallObjectInfoDialog().

файлы MuseamViewActivity.java, ArhitectureViewActivity.java, InterestViewActivity.java, TemplesViewActivity.java, HostelViewActivity.java аналогичным образом определяют структуру соответствующих окон.

Вспомогательные файлы для работы с базой данных

Рассмотрим структуру данных файлов на примере ObjectDbHelper.java. Класс ObjectDbHelper, расширяющий класс SQLiteOpenHelper представляет таблицу object базы данных. В нем объявлена структура таблицы и в методе onCreate() производится создание таблицы и заполнение её текстовыми данными при первом запуске приложения на устройстве.

public void onCreate(SQLiteDatabase db){

db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "+ NAME + " TEXT, " + ADDRESS + " TEXT, " + LAT + " TEXT, " + LON + " TEXT);");

ContentValues values = new ContentValues();

 

values.put(NAME, "Театр Эстрады");

values.put(ADDRESS, "8 Марта 15");

values.put(LAT, "56.835662");

values.put(LON, "60.600392");

db.insert(TABLE_NAME, NAME, values);

Файлы MuseamDbHelper.java, ArhitectureDbHelper.java, InterestDbHelper.java, TemplesDbHelper.java, HostelDbHelper.java устроены аналогичным образом.

Провайдеры

Рассмотрим структуру провайдера на примере файла класса провайдера ObjectViewProvider.java.

Класс ObjectViewProvider данного файла расширяющий базовый класс ContentProvider представляет логику доступа к содержимому базы данных object.

В методе обратного вызова onCreate() который вызывается системой при создании экземпляра ContentProvider, инициализируется объект SQLiteDatabase.

private SQLiteDatabase db;

@Override

public boolean onCreate() {

 

db = (new ObjectDbHelper(getContext())).getWritableDatabase();

return (db == null)? false: true;

}

Метод query(Uri url, String[] projection,

String selection, String[] selectionArgs, String sort)реализует запрос к бд.

Метод insert(Uri url, ContentValues inValues) используется для вставки данных и возвращает клиенту контент-провайдера Uri вставляемой строки.

Метод update(Uri url, ContentValues values,

String where, String[] whereArgs) реализует модификацию данных, а метод delete(Uri url, String where, string[] whereArgs) – удаление данных.

Файлы MuseamProvider.java, InterestProvider.java, ArhitectureProvider.java, TemplesProvider.java, HostelProvider.java устроены аналогичным образом.




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 1321; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.193 сек.