Дельта-синхронизация крипто-дисков

Существуют разные способы зашифровать "облако". Один из них - поместить в облако крипто-диск. В предыдущей статье мы писали, почему это не всегда удобно.

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Широковещательные приемники


Широковещательные приемники

Широковещательные приемники прослушивают широковещательные сообщения системы. Примеры таких сообщений: низкий заряд батареи, нажата кнопка камеры, установлено новое приложение и т.д.

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

Широковещательный приемник — это объект класса BroadcastReceiver или одного из его подклассов. Самый главный метод этого класса — onReceive(), который вызывается, когда приемник получает сообщение.

Рассмотрим пример запуска службы на основании получения широковещательного сообщения — нажатия кнопки камеры. Приемник будет прослушивать сообщения, фильтр намерения будет установлен на действие Intent.ACTION_CAMERA_BUTTON, которое соответствует нажатию кнопки камеры.

Зарегистрировать приемник можно функцией registerReceiver(), а удалить приемник — функцией unregisterReceiver().

Итак, начнем создавать наше приложение. Код основной деятельности MainActivity представлен в файле MainActivity.java (листинг 1).

Листинг 1. Код основной деятельности (MainActivity.java)

package com.samples.my_receiver;

import android.app.Activity;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

public class MainActivity extends Activity {

        // Создаем объект iReceiver класса MyReceiver

MyReceiver iReceiver = new MyReceiver();

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Создаем фильтр намерения

IntentFilter iFilter =

new IntentFilter(Intent.ACTION_CAMERA_BUTTON);

                // Добавляем действие в фильтр

iFilter.addAction(Intent.ACTION_PACKAGE_ADDED);

// Регистрируем приемник

registerReceiver(iReceiver, iFilter);

}

@Override

protected void onDestroy() {

        // Уничтожаем приемник при завершении приложения

unregisterReceiver(iReceiver);

super.onDestroy();

}

}

Разберемся, что есть что. Первым делом мы объявили объект iReceiver класса MyReceiver. Этот класс будет описан позже. Затем мы создали фильтр намерения:

IntentFilter iFilter = new IntentFilter(Intent.ACTION_CAMERA_BUTTON);

iFilter.addAction(Intent.ACTION_PACKAGE_ADDED);

После этого нужно только зарегистрировать приемник с помощью registerReceiver(). Первый параметр — это сам приемник, второй — фильтр намерений:

registerReceiver(iReceiver, iFilter);

Теперь нужно создать класс MyReceiver. Как это сделать с помощью Eclipse, вы уже знаете, поэтому привожу сразу код класса (листинг 2).

Листинг 2. Код класса MyReceiver (файл MyReceiver.java)

package com.samples.my_receiver;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

// Класс MyReceiver является расширением класса BroadcastReceiver

public class MyReceiver extends BroadcastReceiver {

        // Переопределяем метод onReceive()

@Override

public void onReceive(Context rcvContext, Intent rcvIntent) {

String action = rcvIntent.getAction();

// Если действие = Intent.ACTION_CAMERA_BUTTON

if (action.equals(Intent.ACTION_CAMERA_BUTTON)) {

        // то запускаем сервис MyService

rcvContext.startService(new Intent(rcvContext,

MyService.class));

}

}

}

 

Приемник анализирует полученное действие. Если нажата кнопка камеры, то будет запущен сервис (служба) MyService, описанный в файле MyService.java. Код этого файла представлен в листинге 3. Вам нужно изменить только первую строчку, она должна выглядеть так:

package com.samples.my_receiver;

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

Листинг 3. Файл MyService.java

package com.samples.my_first_service;

 

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;

import android.widget.Toast;

 

public class MyService extends Service {

 

@Override

public IBinder onBind(Intent arg0) {

return null;

}

 

@Override

public void onCreate() {

super.onCreate();

Toast.makeText(this,"Service started...",

Toast.LENGTH_LONG).show();

}

 

@Override

public void onDestroy() {

super.onDestroy();

Toast.makeText(this, "Service destroyed...",

Toast.LENGTH_LONG).show();

}

}