Разработка и сопровождение приложений на базе операционной системы Android
Общие характеристики операционной системы Android. Разработка приложения на основе создания менеджера файлов. Получение с помощью приложения доступа к файлам, хранящимся в "облачном хранилище" в сети Интернет. Расчет стоимости программного обеспечения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 03.04.2015 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
· android. telephony. cdma - обеспечивает поддержку телефонии стандарта CDMA;
· android. text - содержит классы для обработки текста;
· android. text. method - предоставляет классы для ввода текста в различные элементы управления;
· android. text. style - предоставляет различные методы оформления фрагмента текста;
· android. utils - содержит классы Log, DebugUtils, TimeUtils и Xml;
· android. view - содержит классы Menu, View, ViewGroup, а также некоторые процессы-слушатели и обратные вызовы;
· android. view. animation - обеспечивает поддержку анимации с построением промежуточных кадров. К основным классам относятся Animation, а также некоторые интерполяторы анимации и специфические анимационные классы, среди которых AlphaAnimation, ScaleAnimation, TranslationAnimation и RotationAnimation;
· android. view. inputmethod - реализует архитектуру фреймворка ввода-вывода. Этот пакет содержится только в версиях 1.5 и выше;
· android. webkit - содержит классы, относящиеся к веб-браузеру. Среди основных классов WebView, CacheManager и CookieManager;
· android. widget - содержит все классы элементов управления пользовательского интерфейса, которые в основном являются производными класса view. Основные виджеты - Button, Checkbox, Chronometer, AnalogClock, DatePicker, DigitalClock, EditText, ListView, FrameLayout,GridView, ImageButton, MediaController, ProgressBar, RadioButton, RadioGroup, RatingButton, Scroller, ScrollView, Spinner, TabWidget, TextView, TimePicker, VideoViewn ZoomButton;
· com. google. android. maps - содержит классы MapView, MapController и MapActivity, необходимые для работы с картами Google.
Упомянутые выше пакеты очень важны при работе с Android. На основании этого списка можно составить представление о глубинном строении платформы Android.
В целом интерфейс прикладного программирования Android Java включает более 40 пакетов и более 700 классов. Вместе все эти многочисленные пакеты составляют насыщенную вычислительную платформу, предназначенную для написания программ для мобильных устройств.
2.2 Сравнительный анализ файловых менеджеров для Android
Как уже было сказано, существуют файловые менеджеры верхнего и нижнего уровня. В ходе сравнительного анализа будут рассмотрены по три приложения из каждого уровня.
Характеристики файлового менеджера ASTRO:
· управление всеми файлами на SD-карте (копирование, перемещение, переименование);
· управление несколькими файлами и/или каталогами одновременно;
· резервное копирование приложений;
· управления запущенными приложениями;
· отправка файлов в виде вложений;
· просмотр миниатюр и картинок;
· просмотр и создание архивов ZIP и TAR;
· хранение резервных копий в "облачном" хранилище;
· создание на рабочем столе ярлыка файла или директории;
· русский язык интерфейса;
· цена: 3,99 $.
Характеристики файлового менеджера File Expert:
· настройка для вида папок при просмотре;
· набор стандартных функций для работы с файлами и папками (удаление, копирование, перенос и переименование);
· встроенный FTP - и HTTP - сервер, который дает возможность получить доступ к выбранным вами папкам на Android-устройстве с локального ПК при помощи беспроводного соединения;
· пакетная установка файлов APK в выбранной вами директории;
· распаковка и создание ZIP-архивов;
· вкладка Favorites для быстрого доступа к часто используемым папкам на смартфоне;
· использование "облачных" web-сервисов: Baidu Cloud, Box.net, Dropbox, KanBox, Sina VDisk, KDrive;
· собственный плеер музыкальных файлов с поддержкой файлов MP3, M4A, WAV, AMR, AWB, WMA, OGG, MID, XMF, RTTTL, SMF, IMY и других;
· русский язык интерфейса;
· цена: 2,96 $.
Характеристики файлового менеджера File Manager HD:
· набор стандартных функций для работы с файлами и папками (удаление, копирование, перенос и переименование);
· встроенный FTP-сервер;
· установка файлов APK;
· распаковка и создание ZIP-архивов;
· русский язык интерфейса;
· бесплатный.
Характеристики файлового менеджера AL File Manager:
· набор стандартных функций для работы с и папками (удаление, перенос и переименование);
· бесплатный.
Характеристики файлового менеджера OI File Manager:
· набор стандартных функций для работы с файлами и папками (удаление, копирование, перенос и переименование);
· управление несколькими файлами и/или каталогами одновременно;
· распаковка и создание ZIP-архивов;
· отправка файлов в виде вложений;
· русский язык интерфейса;
· бесплатный.
Характеристики файлового менеджера Fast File Manager:
· набор стандартных функций для работы с файлами и папками (удаление, копирование, перенос и переименование);
· управление несколькими файлами и/или каталогами одновременно;
· распаковка и создание ZIP-архивов;
· отправка файлов в виде вложений;
· бесплатный.
Очевидно, что файловые менеджеры верхнего уровня при своих достоинствах, однако, являются платными, занимают больший объем памяти и, соответственно, используют больше ресурсов системы. Файловые менеджеры нижнего уровня лишены этих недостатков, но не поддерживают русский язык, что является одним из факторов выбора у русскоязычной аудитории, а также имеют ограниченный функционал.
В разрабатываемом приложении будут реализованы стандартные функции для работы с файлами и папками, управление несколькими файлами и/или папками одновременно, функция доступа к web-сервису box.net для приема и отправки данных.
2.3 Разработка структуры приложения
После изучения инструментария SDK и проведения анализа существующих файловых менеджеров можно приступить к разработке структуры приложения. Наиболее оптимальным представляется вариант, в котором при запуске приложения пользователь производит выбор между доступом к файловой системе устройства и к странице web-сервиса box. Для реализации такого варианта необходимо создать два окна: отображаемое при запуске приложения, в котором пользователь производит выбор, и окна навигации по файловой системе, в котором пользователю доступны функции работы с файлами. При выборе доступа к странице web-сервиса box, приложение с помощью намерения (intent) вызывает встроенный web-браузер.
Структура разрабатываемого приложения приведена на рисунке 2.1.
Рисунок 2.1 - Структура разрабатываемого приложения
Интерфейс главного окна представлен файлом разметки main. xml и будет дополнен меню опций, описание которого приведено в файле icon_menu_for_main. xml. Исходный код главного окна содержится в файле MainActivity. java. Интерфейс окна навигации по файловой системе представлен файлом разметки navigation. xml и будет ListView отображающий список элементов, разметка которых содержится в файле row. xml. Функции работы с файлами будут реализованы в меню опций, описание которого приведено в файле icon_menu_for_navigation. xml, и в контекстном меню, созданным программно и вызываемым длительным нажатием на пункте списка. Исходный код навигационного окна содержится в файле NavigationActivity. java. Файл ArrayAdapterForList. java содержит модифицированный адаптер ArrayAdapter, который необходим для отображения списка элементов.
Таким образом, проведено ознакомление с инструментарием для разработки программ, определена структура и сформулированы принципы работы приложения.
3. Разработка программного обеспечения
Разработку ПО начнем с графичкского интерфейса. Это связано с особенностями программирования для Android. Для того, чтобы взаимодействовать с элементами окна, программный модуль подключается к необходимым элементам с помощью идентификаторов. При этом элементы интерфейса в главном окне далжны быть созданы в первую очередь. Как уже отмечалось ранее, графический интерфейс пользователя объявляется в XML файлах, а основным языком для разработки приложений Android является объектно-ориентированный язык программирования Java. В соответствии с определенной структурой при разработке компонентов приложения (MainActivity. java, NavigationActivity. java, ArrayAdapterForList. java) будет использован язык Java. В качестве среды разработки используется среда Eclipse, так как для нее предоставляется плагин для работы с Android SDK, а также она является свободно распространяемой.
3.1 Графический интерфейс пользователя
Android SDK предоставляет два способа разработки графического интерфейса пользователя. При первом в область окна необходимо перенести элементы интерфейса или виды (views), далее в списке свойств этих элементов изменяются требуемые. При использовании второго способа разработчик набирает теги объявляющие виды и объявляет требуемые свойства вручную в XML файлах.
С помощью XML файлов определяется разметка окон, а также меню опций и прочие элементы графического интерфейса пользователя.
Компонентами интерфейса разрабатываемого приложения являются файлы main. xml, icon_menu_for_main. xml, navigation. xml, icon_menu_for_navigation. xml, row. xml.
3.1.1 Файл разметки main. xml
В файле main. xml содержится разметка главного окна, состоящая из тегов объявляющих элементы и свойства этих элементов. Основой главного окна является элемент-контейнер LinearLayout заполняющий все окно, с фоном белого цвета и с вертикальным расположением внутренних элементов:
<LinearLayout xmlns: android="http://schemas. android.com/apk/res/android"
android: id="@+id/LinearLayoutMain"
android: layout_width="fill_parent"
android: layout_height="fill_parent"
android: background="@android: color/white"
android: orientation="vertical">
Внутри основного LinearLayout содержатся два идентичных элемента-контейнера LinearLayout с горизонтальным расположением внутренних элементов, в состав которых входят ImageView, отображающий изображение, и TextView, отображающий текст. Для элементов-контейнеров LinearLayout с помощью свойства android: onClick объявлен обработчики нажатия navigationButtonClicked и cloudButtonClicked:
<LinearLayout
android: layout_width="fill_parent"
android: layout_height="wrap_content"
android: baselineAligned="false"
android: onClick="navigationButtonClicked"
android: orientation="horizontal"
android: background="@drawable/main_screen_back"
android: padding="5dp"
android: layout_margin="2dp" >
<ImageView
android: id="@+id/imageView1"
android: layout_width="wrap_content"
android: layout_height="wrap_content"
android: src="@drawable/ic_main_myfiles" />
<TextView
android: id="@+id/textView1"
android: layout_width="fill_parent"
android: layout_height="wrap_content"
android: layout_gravity="center"
android: paddingLeft="5dp"
android: text="@string/myfiles_for_textview_on_main"
android: textColor="@android: color/black"
android: textSize="22dp"
android: textStyle="bold" />
</LinearLayout>
Изображение главного окна приведено на рисунке 3.1.
Рисунок 3.1 - Главное окно
3.1.2 Файл меню опций icon_menu_for_main. xml
В файле icon_menu_for_main. xml содержится разметка меню опций для главного окна, вызываемое при нажатии на клавишу "Меню" на устройстве:
<? xml version="1.0" encoding="utf-8"? >
<menu xmlns: android="http://schemas. android.com/apk/res/android" >
<item android: id="@+id/icon_menu_quit"
android: icon="@drawable/ic_menu_quit"
android: title="@string/menu_quit_title" />
</menu>
Каждому пункту меню (item) с помощью свойств id, icon, title назначается идентификатор, изображение (иконка) и название, соответственно. Меню опций может отображать до шести наименований с изображениями. Если наименований больше, один из них заменяется пунктом "Еще", при нажатии на который открывается прокручивающийся список оставшихся элементов меню.
3.1.3 Файл разметки navigation. xml
В файле navigation. xml содержится разметка окна навигации по файловой системе, состоящая из тегов объявляющих элементы и свойства этих элементов. Основой навигационного окна является элемент-контейнер LinearLayout заполняющий все окно, с фоном белого цвета и с вертикальным расположением внутренних элементов:
<? xml version="1.0" encoding="utf-8"? >
<LinearLayout xmlns: android="http://schemas. android.com/apk/res/android"
android: id="@+id/LinearLayout1"
android: layout_width="fill_parent"
android: layout_height="fill_parent"
android: background="@android: color/white"
android: orientation="vertical" >
Внутри основного LinearLayout содержатся три элемента-кнопки Button, элемент для отображения заголовка TextView и элемент для отображения списка ListView. Элемент ListView имеет белый фон и значение #00000000 в свойстве cacheColorHint для избегания эффекта затемнения при прокрутке:
<Button
android: id="@+id/rootButton"
android: layout_width="0dp"
android: layout_height="wrap_content"
android: layout_weight="1"
android: text="/"
android: onClick="rootButtonClicked"/>
<Button
android: id="@+id/memoryCardButton"
android: layout_width="0dp"
android: layout_height="wrap_content"
android: layout_weight="2"
android: text="@string/memory_card_for_button"
android: onClick="memoryCardButtonClicked"/>
<Button
android: id="@+id/multiSelectButton"
android: layout_width="0dp"
android: layout_height="wrap_content"
android: layout_weight="2"
android: text="@string/multiselection_for_button"
android: onClick="multiSelectButtonClicked"/>
</LinearLayout>
<TextView
android: id="@+id/titleManager"
android: layout_width="fill_parent"
android: layout_height="wrap_content"
android: background="@android: color/white"
android: padding="5dp"
android: textColor="@android: color/black"
android: textSize="18dp"
android: textStyle="bold" />
<LinearLayout
android: layout_width="fill_parent"
android: layout_height="wrap_content"
android: orientation="vertical" >
<ListView
android: id="@+id/android: list"
android: layout_width="fill_parent"
android: layout_height="fill_parent"
android: layout_weight="1"
android: background="@android: color/white"
android: cacheColorHint="#00000000"
android: drawSelectorOnTop="true" >
</ListView>
Изображение разметки окна навигации по файловой сиситеме приведено на рисунке 3.2.
Рисунок 3.2 - Навигационное окно
3.1.4 Файл меню опций icon_menu_for_navigation. xml
В файле icon_menu_for_navigation. xml содержится разметка меню опций для навигационного окна, вызываемое при нажатии на клавишу "Меню" на устройстве:
<? xml version="1.0" encoding="utf-8"? >
<menu xmlns: android="http://schemas. android.com/apk/res/android" >
<item android: id="@+id/icon_menu_copy"
android: icon="@drawable/ic_menu_copy"
android: title="@string/menu_copy_title" />
<item android: id="@+id/icon_menu_cut"
android: icon="@drawable/ic_menu_cut"
android: title="@string/menu_cut_title" />
<item android: id="@+id/icon_menu_paste"
android: icon="@drawable/ic_menu_paste"
android: title="@string/menu_paste_title" />
<item android: id="@+id/icon_menu_delete"
android: icon="@drawable/ic_menu_delete"
android: title="@string/menu_delete_title" />
<item android: id="@+id/icon_menu_newfolder"
android: icon="@drawable/ic_menu_newfolder"
android: title="@string/menu_newfolder_title" />
<item android: id="@+id/icon_menu_back"
android: icon="@drawable/ic_menu_back"
android: title="@string/menu_back_title" />
</menu>
Каждому пункту меню (item) с помощью свойств id, icon, title назначается идентификатор, изображение (иконка) и название, соответсвенно.
Меню опций содержит шесть пунктов, пять из которых ("Копировать", "Вырезать", "Вставить", "Удалить", "Новая папка") предназначены для работы с файловой системой, а шестой для возврата в главное окно.
Меню опций навигационного окна изображено на рисунке 3.3
.
Рисунок 3.3 - Меню опций навигационного окна
3.1.5 Файл разметки элемента списка row. xml
В файле row. xml содержится разметка элемента списка, отображаемого в навигационном окне. Основой разметки является элемент-контейнер RelativeLayout заполняющий все окно с относительным расположением внутренних элементов:
<RelativeLayout xmlns: android="http://schemas. android.com/apk/res/android"
android: layout_width="fill_parent"
android: layout_height="fill_parent" >
Внутри RelativeLayout содержатся элементы для отображения: изображения ImageView, названия файла или папки TextView и изображения значка свидетельствующего о выборе пункта списка ImageView:
<ImageView
android: id="@+id/imageViewForIcon"
android: layout_width="wrap_content"
android: layout_height="wrap_content"
android: layout_alignParentLeft="true"
android: layout_centerVertical="true"
android: src="@drawable/ic_launcher" />
<TextView
android: id="@+id/textViewForName"
android: layout_width="wrap_content"
android: layout_height="wrap_content"
android: layout_centerVertical="true"
android: layout_marginLeft="42dp"
android: ellipsize="end"
android: gravity="center_vertical"
android: padding="5dp"
android: scrollHorizontally="true"
android: textColor="@android: color/black"
android: textSize="18dp" />
<ImageView
android: id="@+id/imageViewForSelect"
android: layout_width="wrap_content"
android: layout_height="wrap_content"
android: layout_alignParentRight="true"
android: layout_centerVertical="true"
android: maxHeight="36dp"
android: maxWidth="36dp"/>
3.2 MainActivity. Java
В файле MainActivity. java содержится исходный код главного окна, отображаемой при запуске приложения. В начале файла объявляется Java-пакет приложения: package ru. mail. korgik46. filemanager;
После объявления Java-пакета следует секция import, в которой определяются подключаемые библиотеки и классы:
import android. app. Activity;
import android. content. Intent;
import android.net. Uri;
import android. os. Bundle;
import android. view. Menu;
import android. view. MenuInflater;
import android. view. MenuItem;
import android. view. View;
Ключевое слово extends в объявлении класса главного окна свидетельствует о том, что класс MainActivity наследуется от базового класса Activity.
public class MainActivity extends Activity {
Финализированная переменная типа String HTTP_FOR_WEB содержит http-адрес страницы web-сервиса box
static final String HTTP_FOR_WEB = "http://www.box.com";
При создании окна вызывается метод onCreate, разработчик имеет возможность определить действия при вызове этого метода.
public void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (R. layout. main);
}
В данном случае, при запуске окна устанавливается разметка ее окна из файла main. xml.
При выборе пункта "Мои файлы" вызывается метод navigationButtonClicked (View v):
public void navigationButtonClicked (View v) {
Intent startNavigationActivity;
startNavigationActivity = new Intent (this, NavigationActivity. class);
startActivity (startNavigationActivity);
}
При вызове данного метода создается экзепляр класса Intent (намерение) и запускается навигационное окно.
При выборе пункта "Мое облако" вызывается метод cloudButtonClicked (View v):
public void cloudButtonClicked (View v) {
Intent launchIntent;
launchIntent = new Intent (Intent. ACTION_VIEW, Uri. parse (HTTP_FOR_WEB));
startActivity (launchIntent);
}
При вызове данного метода создается экзепляр класса Intent (намерение) и происходит переход на страницу web-сервиса box с помощью встроенного браузера.
При создании меню опций вызывается метод onCreateOptionsMenu (Menu menu).
public boolean onCreateOptionsMenu (Menu menu) {
MenuInflater inflater = getMenuInflater ();
inflater. inflate (R. menu. icon_menu_for_main, menu);
return true;
}
При вызове метода onCreateOptionsMenu (Menu menu) на разметку главной окна с помощью объекта класса MenuInflater накладывается меню опций из файла icon_menu_for_main. xml.
При выборе пункта меню опций вызывается метод onOptionsItemSelected (MenuItem item).
public boolean onOptionsItemSelected (MenuItem item) {
switch (item. getItemId ()) {
case R. id. icon_menu_quit:
quit ();
return true;
default:
return super. onOptionsItemSelected (item);
}
}
Если при вызове метода onOptionsItemSelected (MenuItem item) идентификатор выбранного пункта меню icon_menu_quit, происходит вызов метода quit ().
Определение метода quit (), определяющего закрытие главного окна и выход из приложения, выглядит следующим образом:
private void quit () {
finish ();
}
Листинг файла MainActivity. java приведен в приложении А дипломного проекта.
3.3 NavigationActivity. java
В файле NavigationActivity. java содержится исходный код окна навигации по файловой системе. В начале файла объявляется Java-пакет приложения:
package ru. mail. korgik46. filemanager;
После объявления Java-пакета следует секция import, в которой определяются подключаемые библиотеки и классы:
import java. io. File;
import java. util. ArrayList;
import java. util. List;
import android. app. AlertDialog;
import android. app. ListActivity;
import android. content. DialogInterface;
import android. content. DialogInterface. OnClickListener;
import android. content. Intent;
import android.net. Uri;
import android. os. Bundle;
import android. view. ContextMenu;
import android. view. ContextMenu. ContextMenuInfo;
import android. view. Menu;
import android. view. MenuInflater;
import android. view. MenuItem;
import android. view. MenuItem. OnMenuItemClickListener;
import android. view. View;
import android. widget. AdapterView. AdapterContextMenuInfo;
import android. widget. ListView;
import android. widget. TextView;
import android. widget. Toast;
Ключевое слово extends в объявлении класса навигационного окна свидетельствует о том, что класс NavigationActivity наследуется от базового класса ListActivity.
public class NavigationActivity extends ListActivity {
private List<String> directoryEntries = new ArrayList<String> ();
private File currentDirectory = new File ("/");
private boolean multiSelection = false;
При создании окна вызывается метод onCreate, разработчик имеет возможность определить действия при вызове этого метода.
public void onCreate (Bundle icicle) {
super. onCreate (icicle);
setContentView (R. layout. navigation);
browseTo (new File ("/"));
registerForContextMenu (getListView ());
}
В данном случае, при запуске окна устанавливается разметка ее окна из файла navigation. xml, в списке отображается содержимое корневого каталога и регистрируется меню опций для элемента ListView.
При создании контекстного меню
public void onCreateContextMenu (ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
int position = aMenuInfo. position;
menu. setHeaderTitle (item);
menu. add ("Копировать"). setOnMenuItemClickListener (new OnMenuItemClickListener () {
public boolean onMenuItemClick (MenuItem item) {
copyFiles ();
return true;
}
});
menu. add ("Вырезать"). setOnMenuItemClickListener (new OnMenuItemClickListener () {
@Override
public boolean onMenuItemClick (MenuItem item) {
cutFiles ();
return true;
}
});
menu. add ("Удалить"). setOnMenuItemClickListener (new OnMenuItemClickListener () {
public boolean onMenuItemClick (MenuItem item) {
deleteFiles ();
return true;
}
});
}
При создании меню опций вызывается метод onCreateOptionsMenu (Menu menu).
public boolean onCreateOptionsMenu (Menu menu) {
MenuInflater inflater = getMenuInflater ();
inflater. inflate (R. menu. icon_menu_for_navigation, menu);
return true;
}
При вызове метода onCreateOptionsMenu (Menu menu) на разметку окна с помощью объекта класса MenuInflater накладывается меню опций из файла icon_menu_for_navigation. xml. При выборе пункта меню опций вызывается метод onOptionsItemSelected (MenuItem item).
public boolean onOptionsItemSelected (MenuItem item) {
switch (item. getItemId ()) {
case R. id. icon_menu_back:
finish ();
return true;
case R. id. icon_menu_copy:
copyFiles ();
return true;
case R. id. icon_menu_cut:
cutFiles ();
return true;
case R. id. icon_menu_paste:
pasteFiles ();
return true;
case R. id. icon_menu_delete:
deleteFiles ();
return true;
case R. id. icon_menu_newfolder:
newFolder ();
return true;
default:
return super. onOptionsItemSelected (item);
}
}
Если при вызове метода onOptionsItemSelected (MenuItem item):
· идентификатор выбранного пункта меню icon_menu_back, происходит вызов метода finish () и переход к главному окну;
· идентификатор выбранного пункта меню icon_menu_copy, происходит вызов метода copyFiles ();
· идентификатор выбранного пункта меню icon_menu_cut, происходит вызов метода cutFiles ();
· идентификатор выбранного пункта меню icon_menu_paste, происходит вызов метода pasteFiles ();
· идентификатор выбранного пункта меню icon_menu_delete, происходит вызов метода deleteFiles ();
· идентификатор выбранного пункта меню icon_menu_newfolder, происходит вызов метода newFolder ().
Метод upOneLevel () реализует обзор родительского каталога помощью метода browseTo ():
private void upOneLevel () {
if (this. currentDirectory. getParent ()! = null) {
this. browseTo (this. currentDirectory. getParentFile ());
}
}
С помощью метода browseTo (final File aDirectory) осуществляется обзор файла или каталога:
private void browseTo (final File aDirectory) {
if (aDirectory. isDirectory ()) {
this. currentDirectory = aDirectory;
fill (aDirectory. listFiles ());
TextView titleManager = (TextView) findViewById (R. id. titleManager);
titleManager. setText (aDirectory. getAbsolutePath ());
}
else {
OnClickListener okButtonListener = new OnClickListener () {
public void onClick (DialogInterface arg0, int arg1) {
// intent to navigate file
Intent i = new Intent (android. content. Intent. ACTION_VIEW,
Uri. parse ("file: // " + aDirectory. getAbsolutePath ()));
startActivity (i);
}
};
}
}
Метод fill (File [] files) реализует заполнение списка:
private void fill (File [] files) {
try {
this. directoryEntries. clear ();
if (this. currentDirectory. getParent ()! = null)
this. directoryEntries. add (". ");
for (File file: files) {
this. directoryEntries. add (file. getAbsolutePath ());
}
ArrayAdapterForList directoryList = new ArrayAdapterForList (this, this. directoryEntries);
this. setListAdapter (directoryList);
}
catch (Exception e)
{
Toast. makeText (this, "Нет прав для доступа",
2). show ();;
}
При нажатии на пункт списка вызывается метод onListItemClick ():
protected void onListItemClick (ListView l, View v, int position, long id) {
String item = (String) getListAdapter (). getItem (position);
Toast. makeText (this, item + " выбран",
2). show ();
int selectionRowID = position;
String selectedFileString = this. directoryEntries. get (selectionRowID);
if (selectedFileString. equals (". ")) {
this. upOneLevel ();
}
else {
File clickedFile = null;
clickedFile = new File (selectedFileString);
if (clickedFile! = null) {
this. browseTo (clickedFile);
}
}
}
}
Листинг файла NavigationActivity. java приведен в приложении А дипломного проекта.
3.4 ArrayAdapterForList. java
В файле ArrayAdapterForList. java содержится исходный код модифицированного адаптера ArrayAdapter, необходимого для отображения списка элементов в окне навигации. В начале файла объявляется Java-пакет приложения:
package ru. mail. korgik46. filemanager;
После объявления Java-пакета следует секция import, в которой определяются подключаемые библиотеки и классы:
import java. io. File;
import java. util. List;
import android. app. Activity;
import android. view. LayoutInflater;
import android. view. View;
import android. view. ViewGroup;
import android. widget. ArrayAdapter;
import android. widget. ImageView;
import android. widget. TextView;
Ключевое слово extends в объявлении класса адаптера свидетельствует о том, что класс ArrayAdapterForList наследуется от базового ArrayAdapter<String>.
public class ArrayAdapterForList extends ArrayAdapter<String> {
Константа TYPE_OF_ITEM содержит название файла разметки элемента списка:
static final int TYPE_OF_ITEM = R. layout. row;
После объявления класса следует конструктор, параметры которого присваиваются внутренним переменным для дальнейшей работы адаптера:
public ArrayAdapterForList (Activity context, List<String> directoryEntries) {
super (context, TYPE_OF_ITEM, directoryEntries);
this. context = context;
this. itemTitle = directoryEntries;
}
Для ускорения работы списка в адаптерах используют модель ViewHolder:
static class ViewHolder {
public ImageView imageViewHolder;
public TextView titleViewHolder;
public ImageView selectHolder;
}
Основным методом адаптера является метод getView (), в котором видам расположенным на разметке элемента списка row. xml присваиваются значения поступившие в адаптер как параметры или же выбранные в соответствии с ними:
public View getView (int position, View convertView, ViewGroup parent) {
ViewHolder holder;
currentDirectory = new File ("itemTitle. get (position)");
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context. getLayoutInflater ();
rowView = inflater. inflate (TYPE_OF_ITEM, null, true);
holder = new ViewHolder ();
holder. imageViewHolder = (ImageView) rowView. findViewById (R. id. imageViewForIcon);
holder. titleViewHolder = (TextView) rowView. findViewById (R. id. textViewForName);
holder. selectHolder = (ImageView) rowView. findViewById (R. id. imageViewForSelect);
rowView. setTag (holder);
}
else {
holder = (ViewHolder) rowView. getTag ();
}
if (! currentDirectory. isDirectory ()) {
holder. imageViewHolder. setImageResource (R. drawable. ic_menu_folder);
}
else
holder. imageViewHolder. setImageResource (R. drawable. ic_menu_file);
holder. titleViewHolder. setText (itemTitle. get (position));
return rowView;
}
Схематически принцип работы модифицированного адаптера ArrayAdapter приведен на рисунке 3.4.
Рисунок 3.4 - Схема работы модифицированного адаптера ArrayAdapter
Листинг файла ArrayAdapterForList. java приведен в приложении А дипломного проекта.
3.5 Файл манифеста AndoidManifest. xml
Файл манифеста AndroidManifest. xml предоставляет основную информацию о программе системе.
Файл AndroidManifest. xml предназначен для:
· объявления имени Java-пакета приложения, который служит уникальным идентификатором;
· описания компонентов приложения - окна, службы, приемники широковещательных намерений и контент-провайдеры, что позволяет вызывать классы, которые реализуют каждый из компонентов, и объявляет их намерения;
· содержания списка необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;
· объявления разрешений, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
· объявления минимального уровня API Android, необходимого для работы приложения;
· перечисления связанных библиотек.
Файл манифеста инкапсулирует всю архитектуру Android-приложения, его функциональные возможности и конфигурацию. Корневым элементом манифеста является <manifest>. Помимо данного элемента обязательными элементами является теги <application> и <uses-sdk>. Элемент <application> является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Кроме обязательных элементов, упомянутых выше, в манифесте по мере необходимости используются другие элементы.
В файле манифеста AndroidManifest. xml разрабатываемого приложения объявление имени Java-пакета выглядит следующим образом: package="ru. mail. korgik46. filemanager"
Объявление минимального уровня API Android, необходимого для работы разрабатываемого приложения: <uses-sdk android: minSdkVersion="7" />
Так как в разрабатываемом файловом менеджере реализованы функции работы с файлами и папками и доступа к web-сервису, необходимо запросить для него разрешения на изменение содержимого внешнего накопителя и доступа в сеть Интернет соответственно: <uses-permission android: name="android. permission. WRITE_EXTERNAL_STORAGE"/>
<uses-permission android: name="android. permission. INTERNET"/>
Структура приложения включает два элемента. Главный из них MainActivity объявляется в файле манифеста по умолчанию, так как с него программа начинает работу. Другое окно NavigationActivity, в котором осуществляется навигация по файловой системе, необходимо объявить вручную в секции <application> после закрывающего тега </activity> главного окна:
<application
android: icon="@drawable/ic_launcher"
android: label="@string/app_name" >
<activity
android: name=". MainActivity"
android: label="@string/app_name" >
<intent-filter>
<action android: name="android. intent. action. MAIN" />
<category android: name="android. intent. category. LAUNCHER" />
</intent-filter>
</activity>
<activity android: name="NavigationActivity"
android: configChanges="keyboardHidden|orientation">
</activity>
</application>
Внесением изменений в файл манифеста заканчивается разработка приложения, которое после установки готово к работе.
3.6 Работа с приложением
Для установки приложения на устройство пользователю необходим установочный APK файл Android. Этот файл генерируется автоматически при сборке проекта в среде разработки Eclipse. Запустив APK файл на устройстве, пользователь начинает процесс установки приложения. Так как приложение загружается не из Google Play Market, необходимо, чтобы в настройках приложений устройства была включена функция "Неизвестные источники". Включение данной функции разрешает установку приложений загруженных не из Маркета. После завершения процесса установки в списке приложений появится значок соответствующий установленному. Приложение можно запустить, нажав на этот значок.
После запуска приложения пользователю показывается главное окно. Для того, чтобы перейти в окно навигации, необходимо выбрать пункт "Мои файлы", расположение и пиктограмма которого приведена на рисунке 3.5.
Рисунок 3.5 - Кнопка "Мои файлы" перехода в навигационное окно
После этого пользователю показывается окно навигации по файловой системе, изображение которого дано на рисунке 3.6.
Рисунок 3.6 - Окно навигации по файловой системе
Навигационное окно содержит три кнопки, две из которых отвечают за отображение корневого каталога и содержимого карты памяти установленной в устройстве соотвтетственно, а третья включает или выключает режим множественного выбора. Ниже кнопок расположен список содержимого текущего каталога. По умолчанию отображается содержимое корневого каталога. Для открытия каталога необходимо нажать на пункт списка с его названием. После этого в заголовке списка отобразится путь текущего каталога, а его содержимое появится в списке. При этом наименование верхнего пункта необходимого для перехода на уровень вверх".".
Для работы с одним файлом или каталогом необходимо длительным нажатием на этом файле списка вызвать контекстное меню, внешний вид которого приведен на рисунке 3.7.
Рисунок 3.7 - Контекстное меню окна навигации
Для работы с несколькими файлами или каталогами необходимо включить режим множественного выбора соответствующей клавишей, далее произвести выбор файлов. Затем нажатием клавиши "Меню" на устройстве вызвать меню опций и произвести выбор необходимого действия. Внешний вид меню опций приведен на рисунке 3.8.
Рисунок 3.8 - Меню опций окна навигации
Для того, чтобы создать новую папку необходимо вызвать меню опций и выбрать в нем пункт "Новая папка", расположение и пиктограмма которого приведены на рисунке 3.9.
Рисунок 3.9 - Кнопка создание новой папки
Для перехода на сайт "облачного" web-сервиса box, необходимо в меню главного окна выбрать пункт "Мое облако", расположение и пиктограмма которого приведены на рисунке 3.10. При этом необходимо, чтобы в устройстве была включена передача данных.
Для возврата в главное окно не необходимо нажать клавишу "Назад" на устройстве или, вызвав меню опций нажатием аппаратной клавиши "Меню", выбрать в нем пункт "Назад".
Рисунок 3.10 - Кнопка "Мое облако" перехода на сайт web-сервиса box
После этого происходит переход на сайт "облачного" web-сервиса box в окне встроенного браузера Android, где пользователю необходимо зарегистрироваться или войти, указав адрес электронной почты и пароль. В последнем случае пользователю предоставляется список загруженных файлов, изображение которого дано на рисунке 3.11.
Рисунок 3.11 - Сайт "облачного" web-сервиса box
Для возврата в главное окно программы необходимо нажать клавишу "Назад" на устройстве или закрыть браузер в меню опций, вызываемом нажатием аппаратной клавиши "Меню".
После этого приложение готово к использованию.
4. Расчет стоимости программного обеспечения
4.1 Основные положения расчета стоимости программного обеспечения
Программное обеспечение является материальным объектом специфической интеллектуальной деятельности специалистов, состоящим из программно-документально оформленного проекта, реализующего свои потребительские свойства и качества в составе функционирующих вычислительных систем или систем обработки данных. По стоимости и срокам службы ПО относится к основным производственным фондам предприятия.
Каждое ПО как реальная продукция имеет определенный жизненный цикл, т.е. период от начала разработки и до снятия с эксплуатации, включающей три стадии: разработку (проектирование), производство (создание) и использование.
Программное обеспечение как товарная продукция могут быть двух видов:
· научно-техническая продукция;
· продукция производственно-технического назначения.
В современных рыночных экономических условиях ПО выступает преимущественно в виде продукции научно-технических организаций, представляющей собой функционально завершенные и имеющие товарный вид программного обеспечения вычислительной техники, реализуемые покупателям по рыночным отпускным ценам. Все завершенные разработки программного обеспечения ВТ являются научно-технической продукцией.
Широкое применение средств вычислительной техники требует постоянного обновления и совершенствования ПО. Выбор эффективных проектов ПО связан с их экономической оценкой и расчетом экономического эффекта.
Расчет экономического эффекта ПО основан на принципах "Комплексной оценки эффективности мероприятий, направленных на ускорение научно-технического прогресса". Экономический эффект может определяться как у разработчика, так и у пользователя.
У разработчика экономический эффект выступает в виде чистой прибыли, остающейся в распоряжении предприятия от реализации ПО, а у пользователя - в виде экономии трудовых, материальных и финансовых ресурсов, получаемой от:
· снижения трудоемкости расчетов, алгоритмизации программирования и отладки программ (задач) за счет использования ПО в процессе разработки автоматизированных систем и систем обработки данных;
· сокращения расходов на оплату машинного времени и других ресурсов на отладку задач;
· снижения расходов на материалы (магнитные, лазерные диски и прочие материалы);
· ускорения ввода в эксплуатацию новых систем;
· улучшения показателей основной деятельности предприятий в результате использования ПО.
Стоимостная оценка ПО у разработчиков предполагает составление сметы затрат, которая включает следующие статьи:
· затраты на материалы;
· спецоборудование;
· заработная плата исполнителей основная и дополнительная;
· отчисления в фонд социальной защиты населения;
· налоги, входящие в себестоимость ПО;
· машинное время;
· расходы на научные командировки;
· прочие расходы;
· накладные расходы.
На основании сметы затрат рассчитывается себестоимость и отпускная цена ПО. Сумма основной заработной платы рассчитывается на основе численности специалистов, соответствующих тарифных ставок и фонда рабочего времени. Причем численность специалистов, календарные сроки разработки программы и фонда рабочего времени определяются по укрупненным нормам времени на разработку, сопровождение и адаптацию программного обеспечения или экспертным путем. Расчет трудоемкости ПО с использованием укрупненных норм времени осуществляется в основном в крупных научно-технических организациях для решения сложных задач программного обеспечения ВТ. В мелких и средних научно-технических организациях трудоемкость, численность исполнителей и сроки разработки ПО определяются экспертным путем с использованием данных по базовым моделям. При определении трудоемкости ПО учитываются объем ПО (в тыс. условных машинных команд или исходных команд), объем документации (тыс. строк), новизна и сложность ПО, язык программирования, степень использования типовых (стандартных) программ.
4.2 Исходные данные
Расчет производится на основе исходных данных, представленных в таблице 4.1
Таблица 4.1 - Исходные данные
Наименование показателей |
Буквенные обозначения |
Единицы измерения |
Количество |
|
Коэффициент новизны |
kн |
единиц |
1,0 |
|
Группа сложности |
гсл |
единиц |
3 |
|
Дополнительный коэффициент сложности |
kсл |
единиц |
0,18 |
|
Поправочный коэффициент, учитывающий использование типовых программ |
kт |
единиц |
0,9 |
|
Установленная плановая продолжительность разработки |
Tр |
лет |
0,1 |
|
Годовой эффективный фонд времени |
Фэф |
дней |
255 |
|
Продолжительность рабочего дня |
Tч |
ч |
8 |
|
Тарифная ставка 1-го разряда |
ТС1 |
руб. |
210000 |
|
Коэффициент премирования |
kпр |
единиц |
1,4 |
|
Норматив дополнительной заработной платы |
Hзд |
% |
10 |
|
Ставка отчислений в фонд социальной защиты населения |
Hсз |
% |
35 |
|
Норматив прочих затрат |
Hпз |
% |
3 |
|
Норматив на сопровождение и адаптацию ПО |
Hса |
% |
10 |
|
Ставка налога на добавленную стоимость |
Hдс |
% |
20 |
|
Норматив амортизации ВТ |
На |
% |
12,5 |
Разработка программных средств (ПС) предусматривает проведение всех стадий проектирования (техническое задание, эскизный проект, технический проект, рабочий проект, внедрение) и относится к 3-й группе сложности. По степени новизны ПС относится к группе "А" с коэффициентом 1,0.
В выполнении работ задействованы: руководитель дипломного проекта, студент-дипломник. Приравняем руководителя дипломного проекта к должности начальник отдела. Присвоим ему 13 разряд, установим продолжительность участия в разработке - 5 дней. Тарифный коэффициент - 3,98;
Приравняем студента-дипломника к должности инженера-программиста без категории. Присвоим ему 9 разряд, установим продолжительность участия в разработке 12 дней. Тарифный коэффициент - 2,48.
4.3 Определение объема программного обеспечения
Объем ПО определяется путем подбора аналогов на основании классификации типов ПО, каталога функций ПО и каталога аналогов ПО в разрезе функций, которые постоянно обновляются и утверждаются в установленном порядке. На основании информации о функциях разрабатываемой САО, по каталогу функций определяется объем функций. Затем по каталогу аналогов в разрезе функций уточняется объем функций.
Таблица 4.2 - Объем программного обеспечения
Номер функции |
Содержание функций |
Объем (условных машинных команд) |
|
109 |
Организация ввода/вывода информации в интерактивном режиме |
109 |
|
305 |
Обработка файлов |
367 |
|
309 |
Формирование файла |
740 |
|
503 |
Управление внешними устройствами и объектами |
1456 |
|
506 |
Обработка ошибочных и сбойных ситуаций |
520 |
|
507 |
Обеспечение интерфейса между компонентами |
686 |
|
707 |
Графический вывод результатов |
203 |
Общий объем ПО рассчитывается по формуле (1):
(1)
где Vo - общий объем ПО, условных машинных команд;
Vi - объем функций ПО, условных машинных команд;
n - общее число функций.
По формуле (1) определим общий объем ПО:
Vo = 109 + 367 +740 + 1456 + 520 +686 + 203 = 4081 условных машинных команд.
4.4 Расчет трудоемкости ПО
На основании общего объема ПО определяется нормативная трудоемкость Tн по таблицам. Нормативная трудоемкость устанавливается с учетом сложности ПО. Выделяется три группы сложности, в которых учтены следующие составляющие ПО: языковой интерфейс, ввод-вывод, организация данных, режимы работы, операционная система и техническая среда. Кроме того, устанавливаются дополнительные коэффициенты сложности ПО.
С учетом дополнительного коэффициента сложности kсл (см. таблицу 4.1) рассчитывается общая трудоемкость ПО.
(2)
где То - общая трудоемкость ПО, человеко-дней;
Тн - нормативная трудоемкость ПО, человеко-дней;
kсл - дополнительный коэффициент сложности ПО.
Объему в 4081 условных машинных команд (3-я группа сложности ПО) соответствует нормативная трудоемкость 110 человеко-дней. По формуле (2) определим общую трудоемкость ПО:
чел. - дней.
При решении сложных задач с длительным периодом разработки ПО трудоемкость определяется по стадиям разработки (техническое задание - ТЗ, эскизный проект - ЭП, технический проект - ТП, рабочий проект - РП и внедрение - ВН) с учетом новизны, степени использования типовых программ и удельного веса трудоемкости стадий разработки ПО в общей трудоемкости разработки ПО. При этом на основании общей трудоемкости рассчитывается уточненная трудоемкость с учетом распределения по стадиям (формула (3)):
(3)
где Ту - уточненная трудоемкость ПО, человеко-дней;
Тi - трудоемкость разработки ПО на i-й стадии, человеко-дней;
m - количество стадий разработки.
Трудоемкость ПО по стадиям определяется с учетом новизны и степени использования в разработке типовых программ и ПО (формула (4)):
Тстi = dстi kн kт Tо, (4)
Подобные документы
Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.
дипломная работа [1,6 M], добавлен 08.07.2015Разработка программного обеспечения для платформы Android версии 2.3: информационное приложения для поклонников футбольной команды, с возможностью просмотра событий, статистики и иной информации о команде и ее успехах. Листинг JsonDataManager.java.
дипломная работа [4,1 M], добавлен 24.04.2013Разработка клиент-серверного игрового приложения на примере игры в шашки для мобильных устройств на базе операционной системы Android. Обзор мобильных платформ. Экраны приложения и их взаимодействие. Графический интерфейс, руководство пользователя.
курсовая работа [2,6 M], добавлен 15.06.2013Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.
дипломная работа [1,6 M], добавлен 17.06.2017Преимущества операционной системы Android. Проектирование интерфейса приложений. Визуальные редакторы и средства кроссплатформенной разработки. Оптимизация игрового процесса, выбор фреймворка и библиотек. Классификация и характеристика игр по жанрам.
дипломная работа [2,6 M], добавлен 10.07.2017Система помощи водителю на базе регистратора. Установка операционной системы Debian. Настройка системных служб и разработка серверного приложения. Создание локальной Wi-Fi сети. Распознавание знаков и библиотека OpenCV. Потоковое видео в Android.
дипломная работа [3,9 M], добавлен 13.09.2017Характеристика работы операционной системы Android, используемой для мобильных телефонов. Создание Android проекта в среда разработки Eclipse. Общая структура и функции файла манифест. Компоненты Android приложения. Способы осуществления разметки.
курсовая работа [1,0 M], добавлен 15.11.2012Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.
курсовая работа [987,1 K], добавлен 27.06.2019Архитектура операционной системы Android. Инструменты Android-разработчика. Установка Java Development Kit, Eclipse IDE, Android SDK. Настройка Android Development Tools. Разработка программы для работы с документами и для осуществления оперативной связи.
курсовая работа [2,0 M], добавлен 19.10.2014