Опубликован: 15.05.2013 | Доступ: свободный | Студентов: 265 / 9 | Длительность: 24:25:00
Специальности: Системный архитектор
Лекция 11:

NFC и API бесконтактного взаимодействия

< Лекция 10 || Лекция 11: 123 || Лекция 12 >

Единовременная отправка данных: Поднести и отправить

Хотя PeerFinder настраивает StreamSocket и это хорошо подходит для сценариев, которые предусматривают длительное взаимодействие, другие сценарии – такие, как отправка фотографии, ссылку, или данных любого рода, в том числе – данных с RFID-метки – нужно лишь отправить некоторые данные с одного устройства на другое и больше ничего.

Для подобных целей у нас есть класс Windows.Networking.Proximity.ProximityDevice (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.aspx), который можно получить следующим образом:

    var proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

Приложение, у которого есть данные, которыми оно хочет поделиться с другоими "публикует" сообщение об этом в форме строки, URI или буфера двоичных данных. RFID-метки публикуют свои сообщения пассивно. Приложение, с другой стороны, использует класс ProximityDevice и его методы publishMessage (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.publishmessage.aspx), publishUriMessage (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.publishmessage.aspx), и publishBinaryMessage (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.publishbinarymessage.aspx) (и метод stopPublishing). Например, вот код, взятый из Сценария 2 примера о бесконтактном взаимодействии (js/ProximityDevice.js, здесь publishText содержит данные из элемента управления):

    var publishedMessageId = proximityDevice.publishMessage("Windows.SampleMessageType", publishText);

С другой стороны, приложение, которое хочет принять подобное сообщение, вызывает ProximityDevice.subscribeForMessage (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.subscribeformessage.aspx), передавая имя сообщения, которое оно ожидает вместе с обработчиком, куда прибывает сообщение:

    var subscribedMessageId = proximityDevice.subscribeForMessage
    ("Windows.SampleMessageType", messageReceived);

    function messageReceived(receivingDevice, message) {
    // Обработка сообщения
    }

Если приложение больше не заинтересовано в подобных сообщениях, оно вызывает stopSubscribingForMessage (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.stopsubscribingformessage.aspx).

На примере этого простого протокола, вы можете видеть, что приложение, которое поддерживает возможность "Поднести и отправить" ("Tap to share") (как она называется) может публиковать сообщения, когда у него есть подходящее содержимое. Оно так же может использовать события devicearrived (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.devicearrived.aspx) и devicedeparted (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.proximitydevice.devicedeparted.aspx) объекта ProximityDevice для того, чтобы узнать, когда другое одноранговое устройство, поддерживающее возможность "Поднести и отправить" оказывается в зоне ближнего взаимодействия, то есть сообщение можно публиковать (это события WinRT). Событие devicearrived – это инструмент, с помощью которого можно обнаружить, что RFID-метка оказалась в зоне ближнего взаимодействия (смотрите ниже).

О чем интересно подумать, однако, так это о том, какие данные можно передавать таким способом. Рассмотрим приложение для организации путешествий, в котором вы можете бронировать авиабилеты, отели, заказывать аренду автомобилей, и, возможно, делать многое другое. Оно может, конечно, публиковать сообщения с основными сведениями, но так же может опубликовать и двоичное сообщение с подробными сведениями, которое позволит передать все сведения о вашем путешествии тому же самому приложению, которое исполняется на другом устройстве, обычно – другому пользователю. Это позволит одному человеку спланировать путешествие и потом передать эти данные другому, который потом лишь нажмет кнопку "Забронировать" и всё будет сделано! Это может быть гораздо более эффективным подходом, чем использование электронной почты для передачи подобных данных о путешествии в виде обычного текста, который другому человеку потом придется вручную вводить в программу.

Публикация URI методом "Поднести и отправить" делает предельно простой возможность, с помощью которой один пользователь может передать другому то, что видит сам, опять же, избегая обходных путей с использованием электронной почты или других форм передачи данных. Быстрое прикосновение – и вы видите то же, что вижу я. Опять же, есть много всего, что можно передать подобным образом, таким образом над этим стоит подумать, особенно если вы разрабатываете своё приложение для мобильных устройств. "Чем обычно заняты люди, которые находятся поблизости друг от друга?". Это – хороший вопрос и ответить на него вы можете с помощью отличного приложения, реализующего возможности бесконтактного взаимодействия.

Обратите внимание, что URI, которое вы передаете, может и не быть в форме http:// - ссылки на вебсайт, но может содержать любую схему URI. Если есть приложение, сопоставленное с данной схемой URI, операция "Поднести и отправить" превращается в операцию касания для активации, так как Windows запустит приложение по умолчанию для данного сопоставления. А если сопоставления не найдено Windows спросит, хотите ли вы загрузить подходящее приложение из Магазина Windows. Вы, конечно, можете использовать и URI Магазина Windows, которые ведут пользователя к прямой возможности установки приложения. Эти URI описаны в материале "Ссылки на приложение" (http://msdn.microsoft.com/library/windows/apps/hh974767.aspx).

Подобные URI делают возможным реализацию сценарий отправки данных и активации приложений для RFID-меток, сообщения в которых обычно записаны в неизменяемую память устройства. Когда вы касаетесь RFID-метки устройством с NFC-модулем, объект ProximityDevice вызывает событие devicearrived. Приложение затем может принять сообщение от метки посредством ProximityDevice.subscribeForMessage. Это означает, что приложению нужно знать тип сообщения, которое может быть отправлено от подобной метки – это может быть некий стандартный тип, или приложение может быть специально написано для конкретного вида меток. Например, художественная галерея может расположить метки около каждого экспоната и разместить в Магазине Windows приложение для данной галереи (или для любых других галерей, которые работают вместе). Это приложение будет знать, какие сообщения могут приходить от меток. Если сообщение имеет подходящую схему URI, прикосновение к RFID-метке может помочь пользователю получить приложение и наслаждаться расширенными возможностями.

Для того, чтобы узнать об этом больше, обратитесь к сообщениям, имеющим отношение к NFC, в блоге для разработчиков приложений для Windows (http://blogs.msdn.com/b/windowsappdev_ru /).

< Лекция 10 || Лекция 11: 123 || Лекция 12 >