Разработка и сопровождение приложений на базе операционной системы 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)


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

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