Монитор датчика освещения для операционной системы 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