Содержание


Создание приложения для учета рабочего времени с помощью маячков iBeacon и службы IBM Mobile Data

Comments

Маячки – это компактные электронные устройства, которые испускают сигналы Bluetooth Low Energy (BLE). Такие сигналы можно ловить с помощью любых устройств с технологией BLE, таких как смартфоны и планшеты. Эта новая технология революционизирует процесс принятия компаниями решений о том, как привести свои товары и услуги в соответствие с потребностями клиентов.

Технология iBeacon
Технология iBeacon

Изображение предоставлено компанией Estimote.

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

Технология iBeacon
Технология iBeacon

Изображение предоставлено компанией Estimote.

Эта статья посвящена тому, как создать простую систему учета рабочего времени и посещаемости, используя SDK Android от Estimote, одной из компаний, выпускающих такие устройства. С помощью приложения Estimote легко сымитировать маячок iBeacon Estimote для его тестирования с iOS-устройством. Мы настроим службу Mobile Data в облачной среде IBM Bluemix™ для хранения данных из Android-устройства и создадим простой веб-сайт, который извлекает данные из базы данных и отображает их пользователю.

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

Постройте это приложение с помощью технологии iBeacon и интегрируйте его со службами Bluemix, и вы поймете, как легко это сделать.

Что нужно для создания приложения

Запустить приложениеПолучить код

Шаг 1. Создание простого приложение для Android с помощью Estimote iBeacon

  1. Создайте проект приложения для Android в Eclipse или на любой другой платформе.
  2. Загрузите Estimote iBeacon SDK для Android и скопируйте файл estimote-sdk-preview.jar из папки Android-SDK/EstimoteSDK/ в папку libs Eclipse.
  3. В файле MainActivity.java импортируйте следующие пакеты, чтобы использовать iBeacon:
    	import com.estimote.sdk.Beacon;
    	import com.estimote.sdk.BeaconManager;
    	import com.estimote.sdk.BeaconManager.MonitoringListener;
    	import com.estimote.sdk.Region;
    	import com.estimote.sdk.Utils;
  4. В том же классе создайте следующие переменные:
    private static final String ESTIMOTE_PROXIMITY_UUID = "YourEstimoteBeaconID";
    /*You can get this ID using several free programs, such as iBeacon Locate*/
    	private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId",ESTIMOTE_PROXIMITY_UUID, null, null);
    	protected static final String TAG = "EstimoteiBeacon";
    	private static final int NOTIFICATION_ID = 123;
    	BeaconManager beaconManager;
    	NotificationManager notificationManager;
    	public int flagRegion = 0;

    Обратите внимание, что для этой задачи переменная ESTIMOTE_PROXIMITY_UUID должна содержать определенный идентификатор маячка. Реальные маячки имеют ID B9407F30-F5F8-466E-AFF9-25556B57FE6D. Однако это число можно изменить с помощью SDK Android. Для имитации маячков iBeacon на смартфонах или планшетах Apple используйте следующее приложение Estimote.

  5. В методе onCreate создаются все переменные и настраивается прослушивание маячка. После входа в область действия маячка внутри метода setRangingListener создается поток, как показано в следующем листинге.
    	beaconManager.setRangingListener(new BeaconManager.RangingListener() {......});
  6. В следующем листинге этот поток каждую секунду вводит информацию от маячка. Это время можно увеличить или уменьшить, используя метод setBackgroundPeriod из API Estimote.
    		public void onBeaconsDiscovered(Region region,
    				final List<Beacon> beacons) {
    			Log.d(TAG, "Ranged beacons: " + beacons);
    	
    			runOnUiThread(new Runnable() {
    				@Override
    				public void run() {
    					if (beacons.size() > 0) {
    						Beacon iBeacon1 = null;
    						iBeacon1 = beacons.get(0);
    						if(String.valueOf(Utils.
    							proximityFromAccuracy(Utils.
    							computeAccuracy(iBeacon1))) == "IMMEDIATE"
    								&& flagRegion == 0){
    							createItem();
    							flagRegion++;
    					postNotification("Welcome, " + userID);
    						}
    
    					}
    				}
    			});
    		}

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

Метод createItem создает новый объект и передает его в базу данных. Объект хранит идентификатор пользователя. Метод postNotification применяется для отправки уведомлений Android и находится в файле MainActivity.java.

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

	<uses-sdk
	    android:minSdkVersion="18"
	    android:targetSdkVersion="19" />
	
	<uses-permission android:name= "android.permission.BLUETOOTH"/>
	<uses-permission android:name= "android.permission.BLUETOOTH_ADMIN"/>
	<uses-permission android:name= "android.permission.GET_TASKS"/>

Добавьте службу для работы с Estimote:

	<service android:name="com.estimote.sdk.service.BeaconService"
	         android:exported="false"/>

Теперь, когда файл MainActivity.java готов, пришло время построить макет приложения. В качестве примера макета рассмотрите содержимое папки res/layout. В этом примере проекта макет содержит следующие файлы:

  • activity_login.xml— окно входа, управляемое методом LoginActivity.java, который получает имя пользователя;
  • access_control_activity.xml— управляемый методом MainActivity.java, в котором происходят взаимодействия с маячком.

Для создания окна отладки, чтобы проверить все функции, предоставляемые SDK Estimote, можно проверить файл activity_main.xml.

Проверка файла activity_main.xml
Проверка файла activity_main.xml

На следующем рисунке показан пример интерфейса основного действия. Оно дожидается сигналов маячка и отображает сообщения в форме уведомления.

Пример интерфейса основного действия
Пример интерфейса основного действия

Шаг 2. Подключение к службе Mobile Data

Чтобы соединить Android-приложение со службой Mobile Data, следуйте инструкциям из статьи Build an Android app using the Mobile Data cloud service на портале developerWorks.

Включите пакеты, указанные на следующем рисунке, в папку libs Eclipse, чтобы добавить их в свой проект.

Добавление пакетов в проект
Добавление пакетов в проект

Классы DBActivity.java и Item.java содержат все необходимые методы для соединения со службой Mobile Data. Чтобы использовать эти классы, объявите следующие объекты в файле MainActivity.java.

	public class MainActivity extends Activity {
		private String userID = "Your Name";
		List<Item> itemList;
		DBActivity dbApp;
		...
	}

Создайте метод createItem(), как показано в следующем примере кода. Этот метод вызывается, когда удаление маячка принимает значение IMMEDIATE.

	public void createItem() {
		String android_id = Secure.getString(getBaseContext().getContentResolver(), Secure.ANDROID_ID);
		Item item = new Item();
		item.setName(userID);
		item.setUserID(android_id);
		item.setCreatedAt();
		item.saveInBackground();
	}

Наконец, включите следующие строки в свой файл AndroidManifest.xml.

		<uses-permission android:name="android.permission.INTERNET" />
   		<uses-permission android:name="android.permission.WAKE_LOCK" />
    		<uses-permission android:name="android.permission.GET_ACCOUNTS" />
    		<uses-permission android:name="android.permission.USE_CREDENTIALS" />
    		<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

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

  1. Из каталога Bluemix выберите Mobile Cloud > Create Application.
  2. Выберите имя приложения и имя хоста для своего приложения и нажмите кнопку Создать. Дождитесь запуска приложения.
  3. Щелкните на своем новом приложении, чтобы открыть страницу Overview. Страница Overview
    Страница Overview
  4. Теперь, когда у вас есть идентификатор приложения, перейдите в проект Eclipse и откройте папку assets. Создайте новый файл с именем accesscontrol.properties. В этом файле добавьте следующий код:
     applicationID=<INSERT_APPLICATION_ID_HERE>
     applicationSecret=<INSERT_APPLICATION_SECRET_HERE>
     applicationRoute=<YOUR_ROUTE>

Теперь можно легко получить доступ к данным через веб-консоль службы Mobile Data в своем проекте в Bluemix.

Доступ к данным через веб-консоль службы MobileData в проекте Bluemix
Доступ к данным через веб-консоль службы MobileData в проекте Bluemix

Шаг 3. Извлечение данных из базы данных и их передача на простой веб-сайт

Теперь Android-приложение подключено к службе Mobile Data. Можно подключать службу к веб-приложению. Вам понадобится SDK Node.js. Мы будем использовать модули ibmbluemix и ibmdata.

Прежде чем использовать службу Mobile Data, нужно инициализировать основной компонент SDK ibmbluemix и передать значения applicationId, applicationSecret и applicationRoute.

  var ibmbluemix = require('ibmbluemix');
  var config = {
    applicationId:"<ApplicationID>",
    applicationSecret:"<ApplicationSecret>"
    applicationRoute:"<ApplicationRoute>"
  };
  ibmbluemix.initialize(config);

Теперь можно использовать службу Mobile Data в своем приложении Node.js.

  var ibmdata = require('ibmdata'),
  app.use(function(req, res, next) {
    req.data = ibmdata.initializeService(req);
    next();
  });

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

  //Создание URI для mbaas Context Route
  appContext.get('/items', function(req, res) {

    // Получение экземпляра Query типа «Item» и запуск 
    // действия find() для извлечения всех элементов 
    var query = req.data.Query.ofType("Item");
    query.find().done(function(items) {
      res.send(items);
      },function(err){
        res.status(500);
        res.send(err);
    });
  });

Теперь можно получить доступ к классу item, используя URL localhost:3000/${appHostName}/v1/apps/${applicationId}/items или ${appRoute}/${appHostName}/v1/apps/${applicationId}/items.

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

  //Извлечение данных из urlItems
  //urlItems : '${appHostName}/v1/apps/${applicationId}/items'
  var getData = function(urlItems){
    $.get(urlItems, function(items){
      console.log(items);
    });
  }

Можете запустить наш пример кода AccessControl с помощью приложения, созданного в Bluemix. (AccessControl — это веб-приложение, которое запрашивает данные из облака и отображает их в браузере).

  1. Скачайте наш пример с помощью следующей команды:
          git clone https://hub.jazz.net/git/yuka/AccessControl2

    Каталог AndroidEclipseProject – это Android-приложение для этого проекта.
  2. Измените файл public/appConfig.json с использованием соответствующих значений application ID, application secret и application route (это полный URL приложения, который мы настроили при создании приложения в Bluemix).
          {
            "applicationId": "<INSERT_APPLICATION_ID_HERE>",
            "applicationSecret": "<INSERT_APPLICATION_SECRET_HERE>",
            "applicationRoute": "<INSERT_APPLICATION_ROUTE_HERE>"
          }
  3. Из каталога приложения установите модули зависимых узлов: npm install--production.
  4. Из того же каталога запустите node app.
  5. Теперь к примеру приложения можно обращаться с помощью локального URL: http://localhost:3000/.
  6. Чтобы развернуть приложение в Bluemix, загрузите и установите CLI Cloud Foundry (см. Installing the CF tool).
  7. Из каталога примера приложения выполните команду cf push ${yourAppName}, чтобы развернуть приложение.
  8. Теперь пример приложения можно тестировать через URL Bluemix. Веб-приложение в браузере
    Веб-приложение в браузере

Заключение

В этой статье показано, как легко создать Android-приложение, используя SDK Estimote iBeacon. И всего несколькими щелчками кнопки мыши мы подключили его к службе IBM Mobile Data.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Мобильные приложения, Облачные вычисления
ArticleID=994278
ArticleTitle=Создание приложения для учета рабочего времени с помощью маячков iBeacon и службы IBM Mobile Data
publish-date=07172014