Разработка приложения на платформе Android

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

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

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

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

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

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

Федеральное агентство железнодорожного транспорта

Омский государственный университет путей сообщения

Кафедра «Автоматика и системы управления»

Разработка приложения на платформе Android

Пояснительная записка к курсовой работе

Студент гр. 23З

Белоусова Е. В.

Омск 2015

Реферат

Пояснительная записка к курсовой работе содержит 35 страниц, 6 рисунков, 1 таблицу, 3 использованных источника, 2 приложения.

Программа «TaskManager», Android, приложение, напоминание, «AndroidStudio».

Объектом исследования является приложение «TaskManager», реализованное для ОС Android.

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

Приложение «TaskManager» разработано с использованием среды разработки AndroidStudio, для тестирования приложения использовалась программа Genymotion для эмуляции Android-проектов.

Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2016.

Введение

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

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

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

1. Техническое задание

Название приложения: TaskManager.

Назначение: приложение предназначено для напоминания о запланированных задачах.

Функции:

- ввод данных для нового напоминания (время, дата, название, доп. информация);

- редактирование информации в уже созданных тасках;

- удаление напоминаний;

- возможность отложить/завершить событие;

- возможность возобновить завершенное событие.

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

Пользовательский интерфейс:

- экран добавления/редактирования события;

- экран списка событий (активных/завершенных);

- экран напоминания.

Стадии и этапы разработки:

Таблица 1

Этапы

Сроки

Постановка задачи и разработка требований

14.09.2015 - 07.10.2015

Анализ требований

07.10.2015 - 14.10.2015

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

15.10.2015 - 25.10.2015

Кодирование

25.11.2015 - 16.11.2015

Отладка

16.11.2015 - 22.11.2015

Тестирование

23.11.2015 - 29.11.2015

Разработка сопроводительной документации(ПЗ)

29.11.2015 - 30.11.2015

2. Средства разработки

Бурное развитие информационных технологий в последнее время привело к тому, что появилось много новых устройств и технологий, таких, как планшеты, смартфоны, нетбуки и другие гаджеты. Мир все больше стал уходить от понятия компьютера как исключительно стандартного персонального компьютера. Смартфоны и прочие гаджеты все более прочно входят в нашу жизнь и становятся привычным дело. Лидирующей платформой среди подобных гаджетов на сегодняшний день является ОС Android. По разным подсчетам за 2015 год этой операционной системой пользуются около 82% владельцев смартфонов.

ОС Android была создана разработчиком Энди Рубином (Andy Rubin) в качестве операционной системы для мобильных телефонов и поначалу развивалась в рамках компании Android Inc. Но в 2005 году Google покупает Android Inc. и начинает развивать операционную систему с новой силой. На данный момент последней версией является Android 6.0 Marshmallow, которая вышла в октябре 2015 года.

В первую очередь для создания приложений необходимо загрузить и установить JDK. Несмотря на то, что последней версией языка Java является Java 8, но к текущему моменту даже самая последняя версия ОС Android поддерживает Java 7. При написании приложения использовалась JDKверсии 1.8.

В качестве среды разработки используется AndroidStudio версии 1.4. Она является рекомендуемой. AndroidStudio - это относительно новая среда разработки Android-приложений, базирующаяся на платформе Intellij IDEA компании JetBrains. Новые функции появляются с каждой новой версией Android Studio. На данный момент доступны следующие функции:

- расширенный редактор макетов: WYSIWYG, способность работать с UI компонентами при помощи Drag-and-Drop, функция предпросмотра макета на нескольких конфигурациях экрана;

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

- различные виды сборок и генерация нескольких .apk файлов;

- рефакторинг кода;

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

- встроенный ProGuard и утилита для подписки приложений;

- шаблоны основных макетов и компонентов Android;

- поддержка разработки приложений для Android Wear и Android TV и другие.

Существуют разные среды разработки для Android. Можно использовать для разработки такие среды как NetBeans, Eclipse, Visual Studio.

Для тестирования приложения используется программа Genymotion.Genymotion - быстрый эмулятор Android, который включает в себя настроенные образы Android. Genymotion доступен для Linux, Windows и Mac OS X и требует VirtualBox.

Особенности Genymotion:

- быстрая загрузка и запуск предварительно настроенных образов Android. Список устройств постоянно расширяется;

- GPS (с настраиваемыми координатами) и батарея (с настраиваемым уровнем батареи);

- отображение: аппаратное ускорение с OpenGL, режим полноэкранного просмотра;

- консоль, которая позволяет взаимодействовать с виртуальной машиной, используя командную строку;

- поддержка ADB;

- эмуляция передней и задней камеры;

- работает на порядок быстрее эмуляторов от Google;

- общий буфер обмена виртуального устройства и ПК;

- редактирование количества процессоров (CPU) и количества оперативной памяти (RAM) в настройках виртуального устройства;

- генерирование архива log-файлов при обращении в тех поддержку;

- эмуляция работы интернета через GPRS, Edge, 3G, 4G и прочее.

API (Application Programming Interface) - это интерфейс программирования, интерфейс создания приложений. В процессе написания приложения использовался интерфейс для создания приложения API 16 (Android 4.1.2).

3. Структура программы

За работу приложения отвечают 8 классов, которые распределены на 4 пакета:

activity - содержит активности приложения;

dao - содержит класс для работы с памятью телефона;

pojo - содержит класс, описывающий всю необходимую для программы информацию об объекте;

service - содержит класс-сервис для проверки наступления события.

В пакете «activity» находятся 5 активностей приложения. Рассмотрим эти активности.

«MainActivity» - главная активность приложения. Инициализирует класс для работы с данными в памяти телефона, запускает сервис для мониторинга задач.

«ActiveActivity» -активность, отображающая список активных задач, а также служит для добавления новых задач.

«FinishActivity» - активность, отображающая список завершенных задач, а также позволяет активировать задачу.

«InfoActivity» - активность, отображающая информацию о задаче, позволяя редактировать ее.

«DelayActvivity» - активность, позволяющая отложить задачу или завершить.

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

В пакете «pojo»хранится класс «Task», описывающий всю необходимую для программы информацию об объекте.

В пакете «service» содержится класс-сервис мониторинга задач. Через фиксированный период времени он проверяет сроки задач. Также этот класс запускает поток для работы приложения в фоновом режиме.

За графический интерфейс отвечают layout-файлы, подключаемые в соответствующих активностях. Такими файлами в приложении являются: «activity_main» - начальная активность, «delay_view» - при наступлении события можно произвести отсрочку напоминания или завершить, «info_activity» - содержит необходимые компоненты интерфейса для редактирования/добавления задач, «list_view_active» - на экране отображаются активные задачи, а также кнопка для добавления новой,«list_view_finish» - на экране отображаются завершенные задачи.

Коды классов и layout-файлов приведены в приложении Б.

4. Реализация программы

Опишем задачи нешаблонных методов в созданных классах.

Вклассе «MainActivity» методы «addFragment1» и «addFragment2» позволяют отображать на экране во frame-layoutсписки активных и завершенных задач, соответственно.

Вклассе «ActiveActivity» метод «refreshTasks» обновляет список активных задач в случае если в эти задачи были внесены изменения в режиме редактирования/добавления.

В классе «FinishActivity»метод «refreshTasks» обновляет список завершенных задач в случае если эти задачи больше не являются активными и пользователь их завершил.

Вклассе «InfoActivity» метод «finish» служит для закрытия открытой в режиме редактирования задачи. Метод «getInfoTask»достает информацию с активности, содержащей информацию о задаче и создает ее.

В классе «TaskDao»метод «saveTask»сохраняет информацию о новой/редактированной задаче в память телефона. Метод «delete» позволяет удалить задачу. Метод «getActiveTasks» возвращает на экран список активных задач, доставая их из памяти телефона. Метод «getFinishedTasks» возвращает на экран список завершенных задач.

В классе «Task» метод «Task»считывает данные объекта из строки (десериализация в JSON). Метод «getJSON» записывает данные об объекте в строку для сохранения (сериализация в JSON).

В классе «MyService»метод «verify» - метод бесконечной проверки сроков задач. Он берет активные задачи, создает в памяти переменную, хранящую текущую дату (включая время, в миллисекундах) и проверяет время каждой задачи с текущим временем. Если время задачи в этом списке меньше текущего, создается и появляется на экране напоминание.

5. Инструкция пользователю

При открытии приложения пользователь видит перед собой экран с тремя кнопками: «активные», «завершенные», «добавить».

На вкладке «активные» отображаются все задачи, которые еще не наступили. На вкладке «завершенные» содержатся уже завершенные задачи.

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

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

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

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

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

Графический интерфейс приложения представлен в приложении А.

Заключение

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

Основная цель работы была выполнена, то есть было написано приложение «TaskManager» с понятным пользователю интерфейсом.

Библиографический список

1 Программирование приложений для планшетных компьютеров и смартфонов / Рето Майер, 2013. 816 с.

2 Учебник по Андроид. Уроки для начинающих [Электронный ресурс] - режим доступа:http://startandroid.ru/

3 СТП ОмГУПС-1.2-2005. Работы студенческие учебные и выпускные квалификационные.

Приложение А

(обязательное)

Интерфейс программы

Экран со списком активных задач (начальный):

Рисунок 1 - Список активных задач

Экран добавления новой задачи:

Рисунок 2 - Добавление новой задачи

Экран редактирования информации об активных задачах:

Рисунок 3 - Редактирование активной задачи

Экран со списком завершенных задач:

Рисунок 4 - Список завершенных задач

Экран изменения информации о завершенных задачах:

Рисунок 5- Редактирование завершенной задачи

Экран с действиями для задачи, для которой сработало напоминание:

приложение задача нешаблонный экран

Рисунок 6 - Действия над задачей

Приложение Б

(обязательное)

Листинг приложения

import android.app.Activity;

import android.app.FragmentTransaction;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.View;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.service.MyService;

public class MainActivity extends Activity {

//главная активность приложения. инициализирует TaskDao. запускает сервис для мониторинга задач.

ActiveActivity frag1;

FinishActivity frag2;

FragmentTransaction fTrans;

SharedPreferences sPref;

public static Activity activity;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); //вызыываетсяметодродительскогокласса, пдключаетсяглавнаяразметка

setContentView(R.layout.activity_main);

frag1 = new ActiveActivity();

frag2 = new FinishActivity();

fTrans = getFragmentManager().beginTransaction();

fTrans.add(R.id.fragment1,frag1);

fTrans.commit();

sPref = getSharedPreferences("SP", Context.MODE_APPEND);

TaskDao.init(sPref);

activity = this;

startService(new Intent(this, MyService.class));

}

public void addFragment1(View v){

fTrans = getFragmentManager().beginTransaction();//Началотранзакции

fTrans.replace(R.id.fragment1,frag1);//заменяемфранмент

fTrans.commit();//коммитимтранзакцию(фиксируемизменения)

}

public void addFragment2(View v){

fTrans = getFragmentManager().beginTransaction();

fTrans.replace(R.id.fragment1, frag2);

fTrans.commit();

}

}

ЛистингБ.1, лист 1

import android.app.Activity;

import android.app.Fragment;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.pojo.Task;

import org.json.JSONException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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

public class FinishActivity extends Fragment {

static Map<String, Task>tasksMap = new HashMap<>();

static ListView listView;

LinearLayout linearLayout;

static List<Task>tasks;

static Activity activity;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) { //подключаемразметку

View v = inflater.inflate(R.layout.list_view_finish, null);//связываем view с layout

listView = (ListView) v.findViewById(R.id.listView);

linearLayout = (LinearLayout) v.findViewById(R.id.LinearLayout);

activity = getActivity();

try {

tasks = TaskDao.getFinishedTasks();

for (Task t : tasks) {

tasksMap.put(t.getTaskName(), t);

}

ArrayAdapter<Task> adapter = new ArrayAdapter<Task>(getActivity(), android.R.layout.simple_list_item_1, tasks);

listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View itemClicked, int position,

long id) {

try {

ЛистингБ.2, лист 1

TextView textView = (TextView) itemClicked;

String strText = textView.getText().toString(); // получаемтекстнажатогоэлемента

Intent intent = (new Intent(getActivity(), InfoActivity.class));

Task task = tasksMap.get(strText);

intent.putExtra("name", task.getJson());

startActivity(intent);

} catch (JSONException e) {

e.printStackTrace();

}

}

});

} catch (JSONException e) {

Log.d("Except", e.toString());

}

return v;

}

public static void refreshTasks(){

try {

if (activity!=null){

tasks = TaskDao.getFinishedTasks();

ArrayAdapter<Task> adapter = new ArrayAdapter<Task>(activity, android.R.layout.simple_list_item_1, tasks);

listView.setAdapter(adapter);

for (Task t : tasks) {

tasksMap.put(t.getTaskName(), t);

}

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

ЛистингБ.2, лист 2

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.DatePicker;

import android.widget.EditText;

import android.widget.TimePicker;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.pojo.Task;

import org.json.JSONException;

import java.util.Date;

public class InfoActivity extends Activity {

EditText editTextName;

EditText editDescription;

Task task;

DatePicker datePicker;

TimePicker timePicker;

@Override

protected void onCreate(Bundle savedInstanceState) {

try {

super.onCreate(savedInstanceState);

setContentView(R.layout.info_activity);

Button save = (Button) findViewById(R.id.save);

save.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

getInfoTask();

finish();}

});

Button delete = (Button) findViewById(R.id.delete);

delete.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

TaskDao.delete(task);

} catch (JSONException e) {

e.printStackTrace();

}

task=null;

finish();

}

});

Button close = (Button) findViewById(R.id.close);

close.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

getInfoTask();

task.setStatusFinished();

finish();

}

});

Button activate = (Button) findViewById(R.id.activate);

activate.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

getInfoTask();

task.setStatusActive();

finish();}

ЛистингБ.3, лист 1

});

datePicker = (DatePicker) findViewById(R.id.datePicker);

timePicker = (TimePicker) findViewById(R.id.timePicker);

editTextName = (EditText) findViewById(R.id.editTextName);

editDescription = (EditText) findViewById(R.id.editText);

Intent intent = getIntent();

delete.setVisibility(View.INVISIBLE);

close.setVisibility(View.INVISIBLE);

activate.setVisibility(View.INVISIBLE);

save.setVisibility(View.INVISIBLE);

if (!intent.getStringExtra("name").equals("")) {

String value = intent.getStringExtra("name");

task = new Task(value);

TaskDao.delete(task);

editTextName.setText(task.getTaskName());

editDescription.setText(task.getDescription());

Date date = new Date(task.getDate());

datePicker.updateDate(2015, date.getMonth(), date.getDate());

timePicker.setCurrentHour(date.getHours());

timePicker.setCurrentMinute(date.getMinutes());

delete.setVisibility(View.VISIBLE);

}

else {save.setVisibility(View.VISIBLE);}

if (task.getStatus().equals("Active")) {

close.setVisibility(View.VISIBLE);

save.setVisibility(View.VISIBLE);

}

else{ activate.setVisibility(View.VISIBLE);}

}catch (Exception e){

e.printStackTrace();

}}

@Override

public void finish() {

if (task != null) {

try {

if (!task.getTaskName().equals(""))

TaskDao.saveTask(task);

} catch (JSONException e) {

e.printStackTrace();

}

}

ActiveActivity.refreshTasks();

FinishActivity.refreshTasks();

super.finish();

}

private void getInfoTask(){

Date date = new Date();

date.setMinutes(timePicker.getCurrentMinute());

date.setHours(timePicker.getCurrentHour());

date.setDate(datePicker.getDayOfMonth());

date.setMonth(datePicker.getMonth());

task = new Task(editTextName.getText().toString(),editDescription.getText().toString(),date.getTime());

}

}

ЛистингБ.3, лист 2

import android.app.Activity;

import android.app.Fragment;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.pojo.Task;

import org.json.JSONException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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

public class ActiveActivity extends Fragment {

static Map<String, Task>tasksMap = new HashMap<>();

static ListView listView;

LinearLayout linearLayout;

Button button;

static List<Task>tasks;

static Activity activity;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) { //подключаемразметку

View v = inflater.inflate(R.layout.list_view_active, null);//связываем view с layout

listView = (ListView) v.findViewById(R.id.listView);

linearLayout = (LinearLayout) v.findViewById(R.id.LinearLayout);

button = (Button) v.findViewById(R.id.button3);

activity = getActivity();

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = (new Intent(getActivity(), InfoActivity.class));

intent.putExtra("name", "");

startActivity(intent);

}

});

try {

tasks = TaskDao.getActiveTasks();

for (Task t : tasks) {

tasksMap.put(t.getTaskName(), t);

}

ЛистингБ.4, лист 1

ArrayAdapter<Task> adapter = new ArrayAdapter<Task>(getActivity(), android.R.layout.simple_list_item_1, tasks);

listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View itemClicked, int position,

long id) {

try {

TextView textView = (TextView) itemClicked;

String strText = textView.getText().toString(); // получаемтекстнажатогоэлемента

Intent intent = (new Intent(getActivity(), InfoActivity.class));

Task task = tasksMap.get(strText);

// Toast.makeText(getActivity(),"this json:"+ task.getJson(), Toast.LENGTH_SHORT).show();

intent.putExtra("name", task.getJson());

startActivity(intent);

} catch (JSONException e) {

e.printStackTrace();

}

}

});

} catch (JSONException e) {

Log.d("Except",e.toString());

}

return v;

}

public static void refreshTasks(){//обновляетсписокактивныхзадач

try {

if (tasks!=null) {

tasks = TaskDao.getActiveTasks();

ArrayAdapter<Task> adapter = new ArrayAdapter<Task>(activity, android.R.layout.simple_list_item_1, tasks);

listView.setAdapter(adapter);

for (Task t : tasks) {

tasksMap.put(t.getTaskName(), t);

}

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

ЛистингБ.4, лист 2

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.pojo.Task;

import com.myproject.taskmanager.service.MyService;

import org.json.JSONException;

//активность, позволяющаяотсрочитьзадачуилизавершить

public class DelayActivity extends Activity {

Task task;

@Override

protected void onCreate(Bundle savedInstanceState) {

try {

super.onCreate(savedInstanceState);

setContentView(R.layout.delay_view);

String value = getIntent().getStringExtra("name");

task = new Task(value);

TaskDao.delete(task);

TextView textView = (TextView) findViewById(R.id.textView3);

textView.setText(task.getTaskName());

TextView textView1= (TextView) findViewById(R.id.textView4);

textView1.setText(task.getDescription());

Button delay10 = (Button) findViewById(R.id.button4);

delay10.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

finish();

}

});

Button delay30 = (Button) findViewById(R.id.button5);

delay30.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

task.setDate(task.getDate()+20*60*1000);

finish();

}

});

Button close = (Button) findViewById(R.id.button6);

close.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

task.setStatusFinished();

finish();

}

});

}catch (Exception e){

e.printStackTrace();

}

ЛистингБ.5, лист1

}

@Override

public void finish() {

try {

TaskDao.saveTask(task);

} catch (JSONException e) {

e.printStackTrace();

}

ActiveActivity.refreshTasks();

FinishActivity.refreshTasks();

super.finish();

startService(new Intent(this, MyService.class));

}

}

ЛистингБ.5, лист 2

import org.json.JSONException;

import org.json.JSONObject;

//классописывающийвсюнеобходимуюдляпрограммыинформациюобобъекте

public class Task {

private String taskName;

private String description;

private Long date;

private String status;

public Task() {

}

public Task(String taskName, String description, Long date) {

this.taskName = taskName;

this.description = description;

this.date = date;

status = "Active";

}

public Task(String json) throws JSONException {

JSONObject task = new JSONObject(json);

this.taskName = task.getString("taskName");

this.description = task.getString("description");

this.date = task.getLong("date");

this.status = task.getString("status");

}

public String getJson() throws JSONException {

JSONObject json = new JSONObject();

json.put("taskName", taskName);

json.put("description", description);

json.put("date", date);

json.put("status", status);

return json.toString();

}

@Override

public String toString() {

return taskName;

}

public String getTaskName() {

return taskName;

}

public void setTaskName(String taskName) {

this.taskName = taskName;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public Long getDate() {

return date;

ЛистингБ.6, лист1

}

public void setDate(Long date) {

this.date = date;

}

public String getStatus() {

return status;

}

public void setStatusActive() {

this.status = "Active";

}

public void setStatusFinished() {

this.status = "Finished";

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Task task = (Task) o;

if (!date.equals(task.date)) return false;

if (description != null ? !description.equals(task.description) : task.description != null)

return false;

if (status != null ? !status.equals(task.status) : task.status != null) return false;

if (!taskName.equals(task.taskName)) return false;

return true;

}

@Override

public int hashCode() {

int result = taskName.hashCode();

result = 31 * result + (description != null ? description.hashCode() : 0);

result = 31 * result + date.hashCode();

result = 31 * result + (status != null ? status.hashCode() : 0);

return result;

}

}

ЛистингБ.6, лист 2

import android.content.SharedPreferences;

import com.myproject.taskmanager.pojo.Task;

import org.json.JSONException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

//классдляработысданнымивпамятителефона.

public class TaskDao {

static SharedPreferences sPref;

public static void init(SharedPreferences Pref){

sPref = Pref;

}

public static void saveTask(Task task) throws JSONException {

SharedPreferences.Editor ed = sPref.edit();

ed.putString(task.getJson(),task.getJson());

ed.commit();

}

public static void delete(Task task) throws JSONException {

SharedPreferences.Editor ed = sPref.edit();

ed.remove(task.getJson());

ed.commit();

}

public static List<Task> getActiveTasks() throws JSONException {

//возвращаетсписокактивныхзадач

List<Task> tasks = new ArrayList<>();

Map<String,String>jsonMap = (Map<String, String>) sPref.getAll();

for (final Map.Entry<String,String> entry : jsonMap.entrySet()) {

Task t = new Task(entry.getValue());

if (t.getStatus().equals("Active"))

tasks.add(t);

}

return tasks;

}

public static List<Task> getFinishedTasks() throws JSONException {

List<Task> tasks = new ArrayList<>();

Map<String,String>jsonMap = (Map<String, String>) sPref.getAll();

for (final Map.Entry<String,String> entry : jsonMap.entrySet()) {

Task t = new Task(entry.getValue());

if (t.getStatus().equals("Finished"))

tasks.add(t);

}

return tasks;

}

}

ЛистингБ.7, лист 1

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.app.Service;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.graphics.BitmapFactory;

import android.os.IBinder;

import com.myproject.taskmanager.R;

import com.myproject.taskmanager.activity.DelayActivity;

import com.myproject.taskmanager.dao.TaskDao;

import com.myproject.taskmanager.pojo.Task;

import java.util.Date;

import java.util.Random;

public class MyService extends Service {

//сервисмониторингазадач. черезфиксированныйпериодвременипроверяетсрокизадач.

//запускаетпотокдляработыприложениявфоновомрежиме

SharedPreferences sPref;

public MyService() {

}

@Override

public IBinder onBind(Intent intent) {

throw new UnsupportedOperationException("Not yet implemented");

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

sPref = getSharedPreferences("SP", MODE_APPEND);

TaskDao.init(sPref);

new Thread(new Runnable() {

public void run() {

verify();

}

}).start();

return Service.START_STICKY;

}

private void verify() {

while (true) {

try {

for (Task task: TaskDao.getActiveTasks()){

Date d = new Date();

if (task.getDate()<d.getTime()){

TaskDao.delete(task);

task.setDate(d.getTime() + 10 * 60 * 1000);

ЛистингБ.8, лист 1

TaskDao.saveTask(task);

Intent intent = new Intent(getApplicationContext(), DelayActivity.class);

intent.putExtra("name", task.getJson());

PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Notification.Builder builder = new Notification.Builder(getApplicationContext());

builder

.setContentIntent(pendingIntent)

.setSmallIcon(R.drawable.ic_launcher)

.setLargeIcon(BitmapFactory.decodeResource(getApplication().getResources(), R.drawable.ic_launcher))

.setTicker("Новоеуведомление")

.setWhen(System.currentTimeMillis())

.setAutoCancel(true)

.setContentTitle("Уведомление")

.setContentText(task.getTaskName());

Notification notification = builder.build();

notification.defaults = Notification.DEFAULT_ALL;

try {

NotificationManager nm = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

nm.notify(new Random().nextInt(), notification);

}catch (Exception e){}

stopSelf();

return;

}

}

Thread.sleep(30000);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

ЛистингБ.8, лист 2

Файлразметки «activity_main»:

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

xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingLeft="16dp"

android:paddingRight="16dp"

android:paddingTop="16dp"

android:paddingBottom="16dp" tools:context=".MainActivity">

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:weightSum="1">

<LinearLayout

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:weightSum="1">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Активные"

android:id="@+id/button"

android:layout_alignParentTop="true"

android:layout_alignParentLeft="true"

android:layout_alignParentStart="true"

android:onClick="addFragment1"

android:paddingLeft="50dp"

android:paddingRight="50dp" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Завершенные"

android:id="@+id/button2"

android:onClick="addFragment2"

android:layout_alignParentTop="true"

android:layout_alignParentEnd="true"

android:paddingLeft="35dp"

android:paddingRight="35dp" />

</LinearLayout>

<FrameLayout

android:layout_width="match_parent"

android:layout_height="376dp"

android:id="@+id/fragment1"

android:layout_below="@+id/button"

android:layout_alignParentStart="true"

android:layout_weight="1.11">

</FrameLayout>

</LinearLayout>

</FrameLayout>

ЛистингБ.9, лист 1

Файлразметки «delay_view»:

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

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

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge"

android:text="Large Text"

android:id="@+id/textView3"

android:layout_gravity="center_horizontal" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceMedium"

android:text="Medium Text"

android:id="@+id/textView4"

android:layout_gravity="center_horizontal" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Напомнитьчерез 10 минут"

android:id="@+id/button4"

android:layout_gravity="center_horizontal" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Напомнитьчерез 30 минут"

android:id="@+id/button5"

android:layout_gravity="center_horizontal" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Завершить"

android:id="@+id/button6"

android:layout_gravity="center_horizontal" />

</LinearLayout>

ЛистингБ.10, лист 1

Файлразметки «info_activity»:

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

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

android:orientation="vertical"

android:layout_width="match_parent" android:layout_height="match_parent"

android:weightSum="1">

<EditText

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/editTextName"

android:hint="Название"

android:layout_gravity="center_horizontal"

android:layout_marginTop="50dp"/>

<EditText

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/editText"

android:hint="Доп. информция"

android:layout_gravity="center_horizontal"

android:layout_marginTop="50dp"/>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge"

android:text="Время"

android:id="@+id/textView"

android:layout_gravity="center_horizontal"

android:layout_marginTop="30dp"/>

<TimePicker

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/timePicker"

android:layout_marginTop="10dp"/>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge"

android:text="Дата"

android:id="@+id/textView2"

android:layout_gravity="center_horizontal"

android:layout_marginTop="30dp"/>

<DatePicker

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/datePicker"

android:layout_marginTop="10dp" />

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

android:orientation="horizontal"

android:layout_width="match_parent" android:layout_height="match_parent"

android:weightSum="1">

<Button

android:layout_width="wrap_content"

ЛистингБ.11, лист 1

android:layout_height="wrap_content"

android:text="Удалить"

android:id="@+id/delete"

android:layout_gravity="center_horizontal"

android:layout_marginTop="100dp"/>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Сохранить"

android:id="@+id/save"

android:layout_gravity="center_horizontal"

android:layout_marginTop="100dp"/>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Завершить"

android:id="@+id/close"

android:layout_gravity="center_horizontal"

android:layout_marginTop="100dp"/>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Активировать"

android:id="@+id/activate"

android:layout_gravity="center_horizontal"

android:layout_marginTop="100dp"/>

</LinearLayout>

</LinearLayout>

ЛистингБ.11, лист 2

Файлразметки «list_view_active»:

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

xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingLeft="16dp"

android:paddingRight="16dp"

android:paddingTop="16dp"

android:paddingBottom="16dp" tools:context=".MainActivity">

<LinearLayout

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:id="@+id/LinearLayout"

android:weightSum="1">

<ListView

android:layout_width="wrap_content"

android:layout_height="243dp"

android:id="@+id/listView"

android:layout_gravity="center_horizontal|top"

android:layout_weight="0.61" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Добавить"

android:id="@+id/button3"

android:layout_gravity="center_horizontal" />

</LinearLayout>

</RelativeLayout>

ЛистингБ.12, лист 1

Файлразметки «list_view_finish»:

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

xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingLeft="16dp"

android:paddingRight="16dp"

android:paddingTop="16dp"

android:paddingBottom="16dp" tools:context=".MainActivity">

<FrameLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:id="@+id/fragment3"

android:layout_below="@+id/button"

android:layout_alignParentStart="true">

<ListView

android:layout_width="wrap_content"

android:layout_height="383dp"

android:id="@+id/listView"

android:layout_gravity="center" />

</FrameLayout>

</RelativeLayout>

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

...

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

  • Создание приложения для Android на языке Java. Переключатель языка и варианты перевода, которые появляются, когда пользователь вводит текст в поле. Возможность просмотра истории переводов. Разработка и подготовка вида экранов тестового приложения.

    курсовая работа [114,8 K], добавлен 03.08.2017

  • Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.

    курсовая работа [167,8 K], добавлен 18.01.2017

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

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

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

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

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

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

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

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

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

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

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

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

  • Разработка программного обеспечения для платформы Android версии 2.3: информационное приложения для поклонников футбольной команды, с возможностью просмотра событий, статистики и иной информации о команде и ее успехах. Листинг JsonDataManager.java.

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

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

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

  • Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.

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

  • Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.

    курсовая работа [3,3 M], добавлен 18.03.2011

  • Средства разработки развивающих и обучающих игр и используемой программы. Среда выполнения и Dalvik. Разработка приложения для платформы Android. Графический интерфейс и обработка касаний экрана. Разработка экранов приложения и их взаимодействия.

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

  • Характеристика работы операционной системы Android, используемой для мобильных телефонов. Создание Android проекта в среда разработки Eclipse. Общая структура и функции файла манифест. Компоненты Android приложения. Способы осуществления разметки.

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

  • Создание приложения, использующего возможности встроенной в ОС Android базу данных SQLite. Проектирование приложения для преподавателей "DataBase". Классы для работы с SQLite. Вставка новой записи в базу данных. Методы update и delete. Листинг программы.

    курсовая работа [744,9 K], добавлен 07.07.2014

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

    дипломная работа [2,7 M], добавлен 03.04.2015

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

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

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

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

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

    отчет по практике [1,6 M], добавлен 26.05.2014

  • Знакомство с особенностями и этапами разработки приложения для платформы Android. Рассмотрение функций персонажа: бег, прыжок, взаимодействие с объектами. Анализ блок-схемы алгоритма генерации платформ. Способы настройки функционала рабочей области.

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

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