Монитор датчика освещения для операционной системы Android

Установка наибольшей частоты получения информации с датчика и применение флага для одноразового выполнения блока кода с отсылкой сообщения. Отправка внутристемного сообщения службе Sender с текстом текущего освещения. Обработка внутрисистемных запросов.

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

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

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

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

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

Высшего профессионального образования

Уфимский государственный авиационный технический университет

Кафедра ВМиК

Курсовая работа

по дисциплине «Операционные системы»

на тему: «Монитор датчика освещения для ОС Android»

Выполнил:

Рысаева Э.Р.

Проверил:

Богданов М.Р.

Уфа-2016

Идея работы

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

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

В рамках данной курсовой работы будут реализованы две взаимодействующие друг с другом службы:

1. LightMeter

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

2. Sender

Данная служба инкапсулирует в себе логику отправки сообщений. Она прослушивает внутрисистемные сообщения и, в случае, если нужно отправить сообщения, она получает текст сообщения и отправляет GET-запрос на сервер.

Остановкой службы, управлением компонентами программы занимается класс MainActivity.

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

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

В программе задействованы следующие классы:

· MainActivity - основной класс

· LightMeter - класс службы отслеживания

· Sender - класс службы, взаимодействующей с сервером

Описание

1. MainActivity

Поля:

private String[] scope = new String[]{VKScope.MESSAGES, VKScope.FRIENDS, VKScope.WALL};

Массив строк, содержащий права доступа приложения для взаимодействия с сервером.

Switch switch1

Компонент-переключатель для остановки и запуска службы.

Integer dataCount

Количество замеров, используется для подсчета текущего среднего освещения.

Integer curr

Переменная для хранения последнего полученного освещения.

Integer last

Переменная для хранения предыдущего освещения.

Функции:

protected void onCreate(Bundle savedInstanceState) {…}

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

public void sendMess

(View view) {…}

Функция - обработчик нажатия на кнопку отправки сообщения.

private boolean isServiceRunning(Class<?> serviceClass) {…}

Функция для проверки запущенности приложения.

2. LightMeter

Поля:

NotificationManager nm;

Менеджер уведомлений, используется для отображения уведомлений в шторке.

Integer NOTIFICATION_ID = 2937219;

ID для управления уведомлениями.

CountDownTimer t;

Таймер отсчета, используется для отправки внутристемных сообщений каждые 10 секунд.

SensorManager sensorManager;

SensorManager для получения объекта, представляющего датчик освещения.

Sensor sensorLight

Объект, представляющего датчик освещения

Boolean getOnce

Флаг для управления получением данных с датчика.

int lastLX

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

Функции:

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

Функция, вызывающаяся при запуске службы.

public void onCreate() {…}

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

public IBinder onBind(Intent intent) {}

Функция, вызывающаяся при привязке службы.

public void notifyUser(String header, String text) {…}

Функция, показывающая уведомление в шторке с заданными заголовком и текстом.

3. Sender

Функции:

protected void onCreate(Bundle savedInstanceState) {…}

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

private void sendMessage(String m) {…}

Функция отсылающая сообщение с текстом.

public IBinder onBind(Intent intent) {}

Функция, вызывающаяся при привязке службы.

Детали работы

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

MainActivity

При запуске приложения в методе onCreate в первую очередь устанавливается разметка окна:

setContentView(R.layout.activity_main);

Файл activity_main.xml определяет следующую разметку окна:

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

В методе onCreate также определяются действия при нажатии на переключатель: датчик код освещение запрос

switch1 = (Switch) findViewById(R.id.switch1);switch1.setChecked(isServiceRunning(LightMeter.class)); switch1.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View view) {

if(switch1.isChecked()){

Intent i = new Intent(getApplicationContext(), LightMeter.class);

getApplicationContext().startService(i);

}

else{

try{stopService( new Intent(MainActivity.this, LightMeter.class)); }

catch (Exception e) { }

}

}

});

Этот код устанавливает обработчик на нажатие, а затем в нем проверяет состояние переключателя: если вкл, то необходимо запустить службу LightMeter, иначе остановить.

Далее там же определяется приемник сообщений:

BroadcastReceiver r = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals("handleData")){

curr = intent.getIntExtra("lx", 0);

((TextView) findViewById(R.id.textView2)).setText((last*dataCount + curr) / (dataCount + 1) + " lx");

((TextView) findViewById(R.id.textView4)).setText(curr.toString() + " lx");

dataCount++;

last = curr;

}

}

};

В случае действия «handleData», MainActivity будет изменять содержимое своих textView и подсчитывать среднее значение освещения.

Функция sendMess имеет следующий вид:

public void sendMess(View view) {

getApplicationContext().sendBroadcast(new Intent()

.setAction("sendMessage")

.putExtra("message", last + "lx"));

}

Здесь происходит отправка внутристемного сообщения службе Sender с текстом текущего освещения.

LightMeter

Рассмотрим функцию onStartCommand.

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

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

SensorEventListener listenerLight = new SensorEventListener() {

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override

public void onSensorChanged(SensorEvent event) {

lastLX = (int) (event.values[0]);

if(getOnce){

getApplicationContext().sendBroadcast(new Intent().setAction("handleData").putExtra("lx", (int) (event.values[0])));

getOnce = false;

Toast.makeText(getBaseContext(), String.valueOf(event.values[0]),

Toast.LENGTH_SHORT).show();

}

}

};

Далее обработчик регистрируется в системе:

sensorManager.registerListener(listenerLight, sensorLight, SensorManager.SENSOR_DELAY_NORMAL);

Затем определяется и сразу же запускается таймер:

t = new CountDownTimer(3600000l, 100000l) {

@Override

public void onTick(long l) {

getOnce = true;

//if(l % 100000l == 0l)

getApplicationContext().sendBroadcast(new Intent()

.setAction("sendMessage")

.putExtra("message", lastLX + "lx"));

Log.d("BLS", l + "");

}

@Override

public void onFinish() {

stopSelf();

}

}.start();

И показывается уведомление:

notifyUser("Служба работает", "");

Функция notifyUser:

public void notifyUser(String header, String text){

Intent resultIntent = new Intent(this, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0,

resultIntent, PendingIntent.FLAG_CANCEL_CURRENT);

android.support.v4.app.NotificationCompat.Builder mBuilder =

new android.support.v4.app.NotificationCompat.Builder(this)

.setSmallIcon(R.mipmap.ic_launcher)

.setContentTitle(header)

.setContentText(text)

.setContentIntent(pendingIntent)

.setOngoing(true);

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

nm.notify(NOTIFICATION_ID, mBuilder.build());

Sender

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

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

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

3. При необходимости отсылку сообщений можно очень легко прекратить путем остановки службы

При создании службы в методе onCreate инициализируется и регистрируется приемник сообщений:

final IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction("sendVKMessage");

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if(!intent.getAction().equals("sendMessage"))

return;

String message = intent.getStringExtra("message") + "\n";

message += new SimpleDateFormat("Текущее время: yyyy/MM/dd HH:mm:ss").format(new Date());

try{

message = URLEncoder.encode(message,"UTF-8");

}

catch (Exception e){

message = "Error_while_url_encoding";

}

sendMessage(message);

}

};

registerReceiver(broadcastReceiver,intentFilter);

Функция sendMessage содержит следующий код:

VKRequest request = new VKRequest("messages.send?user_id=" + VKSdk.getAccessToken().userId + "&domain=2e43ce&message=" + message + "&access_token=" + VKSdk.getAccessToken());

request.executeWithListener(new VKRequest.VKRequestListener() {

@Override

public void onComplete(VKResponse response) {

super.onComplete(response);

}

@Override

public void onError(VKError error) {

Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_LONG);

super.onError(error);

}

});

Здесь происходит создание и исполнение запроса посредством VK SDK. Также реализованы обработчики, позволяющие обработать успешный и неудачный запросы.

Примеры работы программы

Вывод

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

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

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

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

Список литературы

1. Андерс Ёрансон: Эффективное использование потоков в опреационной системе Android. Технологии асинхронной обработки данных / Efficient Android Threading ДМК Пресс, 2015

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

...

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

  • Архитектура операционной системы Android. Инструменты Android-разработчика. Установка Java Development Kit, Eclipse IDE, Android SDK. Настройка Android Development Tools. Разработка программы для работы с документами и для осуществления оперативной связи.

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

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

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

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

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

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

    курсовая работа [592,7 K], добавлен 30.03.2011

  • Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.

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

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

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

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

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

  • Система помощи водителю на базе регистратора. Установка операционной системы Debian. Настройка системных служб и разработка серверного приложения. Создание локальной Wi-Fi сети. Распознавание знаков и библиотека OpenCV. Потоковое видео в Android.

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

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

    презентация [365,8 K], добавлен 13.08.2013

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

    реферат [60,6 K], добавлен 16.04.2012

  • Непрерывная и дискретная информация. Кодирование как процесс представления информации в виде кода. Особенности процедуры дискретизации непрерывного сообщения. Позиционные и непозиционные системы счисления. Представление информации в двоичном коде.

    реферат [117,3 K], добавлен 11.06.2010

  • Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.

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

  • Сравнительная характеристика работы программ Outlook Express и Outlook. Особенности создания факс-сообщения. Работа с адресной книгой. Создание и отправка нового сообщения, работа электронной почты в www. Преимущества использования электронной почты.

    реферат [376,6 K], добавлен 10.11.2009

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

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

  • Объект XMLHttpRequest (AJAX): отправка и обработка ответов HTTP-запросов с помощью JavaScript. Методы и свойства объекта, общие для Internet Explorer 5, Mozilla, Netscape 7. Алгоритм выполнения, JavaScript-код. PHP-скрипт получения данных из базы.

    лабораторная работа [14,9 K], добавлен 06.06.2009

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

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

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

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

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

    реферат [885,8 K], добавлен 19.10.2015

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

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

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

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

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