Как проверить тип nfc метки android studio
Перейти к содержимому

Как проверить тип nfc метки android studio

  • автор:

Как проверить тип NFC-метки в Android Studio

khokku.ru

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

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

Определение типа NFC-метки является важным шагом в процессе работы с ней. Некоторые метки могут содержать информацию о товарах, URL-адресах или контактных данных, и для эффективной обработки этой информации разработчику необходимо знать, с каким типом метки он имеет дело. Проверка типа NFC-метки в Android Studio поможет разработчику правильно обработать данные и использовать их в своем приложении.

Работа с NFC-метками

NFC-метка (Near Field Communication) – это специальное устройство, которое позволяет бесконтактно обмениваться данными на короткие расстояния. В Android Studio есть множество возможностей для работы с NFC-метками. В этом разделе мы рассмотрим основные аспекты работы с NFC-метками в Android Studio.

1. Проверка наличия NFC-метки

Первым шагом при работе с NFC-метками в Android Studio является проверка на наличие NFC-метки. Для этого необходимо использовать класс NfcAdapter. Сначала получите экземпляр класса NfcAdapter с помощью метода getDefaultAdapter(). Затем проверьте, поддерживается ли NFC на устройстве при помощи метода isEnabled().

private NfcAdapter nfcAdapter;

@Override

protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

nfcAdapter = NfcAdapter.getDefaultAdapter(this);

if (nfcAdapter == null)

// NFC не поддерживается на устройстве

Toast.makeText(this, "NFC не поддерживается", Toast.LENGTH_SHORT).show();

finish();

return;

>

if (!nfcAdapter.isEnabled())

// NFC выключено на устройстве

Toast.makeText(this, "NFC выключено", Toast.LENGTH_SHORT).show();

>

>

2. Чтение данных с NFC-метки

Для чтения данных с NFC-метки необходимо создать фильтр для типа NFC-метки, которые вы хотите считывать. Затем, в методе onResume() вашей активности, зарегистрируйте вашу активность для приема данных с NFC-метки. Когда активность будет на переднем плане и обнаружит NFC-метку, метод onNewIntent() будет вызван. В нем вы можете получить данные с помощью метода getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG).

private IntentFilter[] intentFiltersArray;

private String[][] techListsArray;

@Override

protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

nfcAdapter = NfcAdapter.getDefaultAdapter(this);

// проверка наличия и включения NFC

// создание интент-фильтров

IntentFilter ndefIntentFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);

try

ndefIntentFilter.addDataType("text/plain");

> catch (IntentFilter.MalformedMimeTypeException e)

e.printStackTrace();

>

intentFiltersArray = new IntentFilter[] ;

// создание списков технологий

techListsArray = new String[][] >;

>

@Override

protected void onResume()

super.onResume();

if (nfcAdapter != null)

nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);

>

>

@Override

protected void onPause()

super.onPause();

if (nfcAdapter != null)

nfcAdapter.disableForegroundDispatch(this);

>

>

@Override

protected void onNewIntent(Intent intent)

super.onNewIntent(intent);

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))

Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

if (rawMessages != null)

NdefMessage[] messages = new NdefMessage[rawMessages.length];

for (int i = 0; i < rawMessages.length; i++)

messages[i] = (NdefMessage) rawMessages[i];

>

// обработка полученных сообщений

>

>

>

3. Запись данных на NFC-метку

Для записи данных на NFC-метку необходимо сначала создать NdefRecord, который будет содержать данные. Затем создайте NdefMessage, в который добавьте NdefRecord с вашими данными. Наконец, используйте метод writeNdefMessage() объекта класса Ndef на вашей NFC-метке для записи данных.

private NdefRecord createTextRecord(String text, Locale locale, boolean encodeInUtf8) 

byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));

Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");

byte[] textBytes = text.getBytes(utfEncoding);

int utfBit = encodeInUtf8 ? 0 : (1

char status = (char) (utfBit + langBytes.length);

byte[] data = new byte[1 + langBytes.length + textBytes.length];

data[0] = (byte) status;

System.arraycopy(langBytes, 0, data, 1, langBytes.length);

System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);

return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);

>

private void writeNfcTag(String text) throws IOException, FormatException

NdefRecord record = createTextRecord(text, Locale.ENGLISH, true);

NdefMessage message = new NdefMessage(new NdefRecord[] );

Ndef ndef = Ndef.get(tag);

if (ndef != null)

ndef.connect();

if (ndef.isWritable())

ndef.writeNdefMessage(message);

>

ndef.close();

>

>

4. Чтение различных типов NFC-меток

Примеры кода, описанные выше, позволяют читать и записывать NFC-метки, содержащие текстовую информацию в формате NDEF (NFC Data Exchange Format). Однако, в NFC-метках может быть и другая информация, например, URL-адрес, SMS, геолокация и так далее. Для работы с такими типами NFC-меток необходимо использовать соответствующие классы и методы.

С помощью класса NdefRecord можно определить тип NFC-метки и извлечь данные. Кроме того, есть готовые классы, такие как NdefRecord.createUri() для работы с метками, содержащими URL-адреса.

Выводы

Работа с NFC-метками в Android Studio может быть осуществлена с помощью классов и методов, предоставляемых Android SDK. Вы можете проверять наличие NFC-меток, считывать данные с них и записывать данные на них. Кроме того, в Android Studio есть возможность работать с различными типами NFC-меток, такими как URL-адреса, SMS и геолокация.

Для работы с NFC-метками вам потребуется проверить наличие и включение NFC на устройстве, создать фильтр для нужного типа NFC-метки, регистрировать вашу активность для чтения данных с NFC-метки, а также записывать данные на NFC-метку, если это необходимо. Используя указанные выше методы и классы, вы сможете эффективно работать с NFC-метками в Android Studio.

Подключение NFC-меток к Android Studio

Для работы с NFC-метками в Android Studio необходимо выполнить следующие шаги:

    Добавьте разрешение на использование NFC в файле манифеста Android-приложения:

NfcManager nfcManager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);

NfcAdapter nfcAdapter = nfcManager.getDefaultAdapter();

if (nfcAdapter == null)

// NFC не поддерживается

>

@Override

protected void onResume()

super.onResume();

IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);

IntentFilter[] writeTagFilters = new IntentFilter[] ;

nfcAdapter.enableForegroundDispatch(this, nfcPendingIntent, writeTagFilters, null);

>

@Override

protected void onPause()

super.onPause();

nfcAdapter.disableForegroundDispatch(this);

>

@Override

protected void onNewIntent(Intent intent)

super.onNewIntent(intent);

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()))

// Обработка события

>

>

@Override

protected void onResume()

super.onResume();

IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);

IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);

try

ndefDetected.addDataType(«text/plain»);

> catch (IntentFilter.MalformedMimeTypeException e)

throw new RuntimeException(«Ошибка при создании фильтра NFC.»);

>

IntentFilter[] writeTagFilters = new IntentFilter[] ;

nfcAdapter.enableForegroundDispatch(this, nfcPendingIntent, writeTagFilters, null);

>

@Override

protected void onNewIntent(Intent intent)

super.onNewIntent(intent);

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()))

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

if (tag != null)

Ndef ndef = Ndef.get(tag);

if (ndef != null)

try

ndef.connect();

NdefMessage ndefMessage = ndef.getNdefMessage();

NdefRecord[] records = ndefMessage.getRecords();

for (NdefRecord record : records)

if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT))

// Обработка данных метки

String data = new String(record.getPayload());

// .

>

>

ndef.close();

> catch (IOException | FormatException e)

e.printStackTrace();

>

>

>

>

>

Теперь ваше приложение готово для работы с NFC-метками в Android Studio. Вы можете выполнять различные действия при обнаружении и чтении различных типов NFC-меток.

Проверка типа NFC-метки

В Android Studio можно проверить тип NFC-метки, чтобы определить, какой тип данных содержится в метке. Это может быть полезно при разработке приложений, которые взаимодействуют с NFC-метками.

Для проверки типа NFC-метки в Android Studio следуйте следующим шагам:

  1. Добавьте соответствующие разрешения в файл манифеста вашего проекта. Включите следующие строки в раздел файла AndroidManifest.xml:
  1. Откройте файл макета активности, где будет использоваться функциональность NFC. Добавьте элемент в макете активности, чтобы ваше приложение могло обрабатывать соответствующие интенты:
  1. В методе onCreate() вашей активности получите экземпляр класса Intent, который запустил вашу активность:

Intent intent = getIntent();

  1. Проверьте, содержит ли полученный интент NFC-данные:
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) 

// Обработка NFC-данных

> else

// Обработка других данных

>

  1. Если интент содержит NFC-данные, вы можете получить доступ к ним следующим образом:
NdefMessage[] messages = null;

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

if (rawMsgs != null)

messages = new NdefMessage[rawMsgs.length];

for (int i = 0; i < rawMsgs.length; i++)

messages[i] = (NdefMessage) rawMsgs[i];

>

// Доступ к NDEF-записям

>

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

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

Детальный анализ NFC-меток

В данном разделе мы рассмотрим детальный анализ NFC-меток и определим их типы на основе их содержимого.

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

Один из самых простых способов определить тип NFC-метки — это прочитать ее содержимое и проанализировать полученные данные. Для этого можно использовать метод getParcelableExtra класса Intent. Этот метод возвращает объект класса NdefMessage, содержащий NDEF-записи с данными метки.

Каждый NDEF-запись представляет собой набор данных, помещенных в NFC-метку, и имеет свой тип. Для определения типа метки можно анализировать типы содержащихся в ней NDEF-записей.

Для примера рассмотрим типы NDEF-записей, которые могут быть в метках:

  1. URI-запись (NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI) — содержит ссылку на веб-страницу или URI-схему;
  2. Текстовая запись (NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT) — содержит текстовую информацию;
  3. Android Application Record (NdefRecord.TNF_EXTERNAL_TYPE) — содержит информацию о приложении, которое будет обрабатывать данную метку;
  4. Smart Poster (NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_SMART_POSTER) — содержит информацию, которая выводится на экран устройства при обнаружении метки;
  5. … Для определения типа NFC-метки можно создать метод, который будет анализировать полученные NDEF-записи:

private static String getTagType(Intent intent)

String tagType = "";

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

if (rawMsgs != null)

NdefMessage[] messages = new NdefMessage[rawMsgs.length];

for (int i = 0; i < rawMsgs.length; i++)

messages[i] = (NdefMessage) rawMsgs[i];

>

NdefRecord record = messages[0].getRecords()[0];

short tnf = record.getTnf();

byte[] type = record.getType();

if (tnf == NdefRecord.TNF_WELL_KNOWN)

if (Arrays.equals(type, NdefRecord.RTD_URI))

tagType = "URI";

> else if (Arrays.equals(type, NdefRecord.RTD_TEXT))

tagType = "Текст";

> else if (Arrays.equals(type, NdefRecord.RTD_SMART_POSTER))

tagType = "Smart Poster";

>

> else if (tnf == NdefRecord.TNF_EXTERNAL_TYPE)

tagType = "Android Application Record";

>

>

return tagType;

>

В приведенном методе мы получаем массив NDEF-записей из полученного Intent. Затем мы анализируем первую запись и проверяем ее тип. Если тип записи совпадает с одним из известных нам типов (например, URI, Текст или Smart Poster), то мы устанавливаем соответствующее значение для переменной tagType. Таким образом, используя метод getTagType, вы сможете определить тип NFC-метки на основе ее содержимого и продолжить обработку данных согласно определенному типу.

Использование NFC-технологий

  1. Добавьте разрешение на использование NFC в манифест-файле приложения:
  2. Инициализируйте объект класса NfcAdapter, который предоставляет доступ к возможностям NFC.
  3. Создайте обработчик Intent-фильтров для определения типа NFC-сообщений, которые ваше приложение может принимать.
  4. Добавьте обработчик событий NFC-сообщений в коде приложения, чтобы выполнять нужные действия при получении соответствующих сообщений.
  5. Определите, какие данные вы хотите передавать через NFC.

Для передачи данных через NFC можно использовать разные форматы, такие как текст, URL, изображения и т.д. Важно указать формат передаваемых данных в соответствующем типе NFC-метки.

Проверка типа NFC-метки в Android Studio позволяет получить информацию о формате данных, закодированных на метке, и обработать их соответствующим образом. В зависимости от типа метки, вы можете выполнять различные действия в своем приложении, например, открывать ссылки или отображать текстовую информацию.

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

Статья «Как проверить тип NFC-метки в Android Studio: подробный гайд» поможет вам разобраться в процессе работы с NFC и научиться создавать функциональные приложения, использующие эту передовую технологию.

Примеры использования NFC-меток

НFC-метки (Near Field Communication) можно использовать для различных целей. Вот несколько примеров применения:

  • Оплата через NFC: NFC-метки могут использоваться для проведения безконтактной оплаты. Пользователи могут привязать свои банковские карты к NFC-меткам и оплачивать покупки, просто прикладывая телефон с активированным NFC к считывателю. Это удобно и быстро.
  • Вход на мероприятия: NFC-метки могут быть использованы для контроля доступа на различные мероприятия. Если посетитель получил NFC-метку, он может ею активировать доступ к определенным зонам или услугам.
  • Информационные точки: NFC-метки могут использоваться для предоставления дополнительной информации о предметах, местах или товарах. Пользователи могут просто приложить свой телефон к NFC-метке, чтобы получить доступ к дополнительным материалам или информации.
  • Автоматические настройки: NFC-метки могут быть использованы для автоматической настройки устройств или приложений. Например, можно настроить NFC-метку для автоматического включения беспроводного соединения или изменения настроек звука на телефоне при ее считывании.

Это лишь несколько примеров использования NFC-меток. Возможности их применения очень широки и зависят от конкретных потребностей и задач пользователя.

Вопрос-ответ

Зачем нужно проверять тип NFC-метки в Android Studio?

Проверка типа NFC-метки в Android Studio позволяет определить, какую информацию содержит метка и какую логику обработки использовать в приложении. Это позволяет создавать более гибкие и функциональные приложения, способные взаимодействовать с различными типами NFC-меток.

Какую информацию можно получить из типа NFC-метки?

Информация, которую можно получить из типа NFC-метки, зависит от конкретного типа метки. Например, для NFC-меток NDEF можно получить текстовую информацию, URL-адреса, контактные данные и другие пользовательские данные. Для других типов меток могут быть доступны другие данные, такие как идентификаторы, сертификаты и др.

Какие существуют типы NFC-меток?

Существует несколько типов NFC-меток, включая NFC-метки NDEF (NFC Data Exchange Format), NFC-метки MIFARE Classic, NFC-метки MIFARE Ultralight и другие. Каждый тип метки имеет свои спецификации и функциональность, поэтому важно правильно определить тип метки для дальнейшей обработки в приложении.

Как проверить тип NFC-метки в Android Studio?

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

Как использовать класс Ndef для проверки типа NFC-метки в Android Studio?

Для использования класса Ndef и проверки типа NFC-метки в Android Studio необходимо выполнить несколько шагов. Сначала необходимо получить объект Intent, переданный в приложение при обнаружении NFC-метки. Затем можно получить массив объектов NdefRecord из объекта Intent и проверить тип каждого NdefRecord с помощью метода getType().

Какая логика обработки данных NFC-метки может использоваться в приложении?

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

Как проверить тип nfc метки android studio

NFC (near field communication) – стандартизированная технология обмена данными на короткие расстояния, позволяющая осуществлять взаимодействия между двумя электронными устройствами простым и интуитивно понятным способом. Например, с помощью оснащенного NFC смартфона вы можете делать покупки, раздавать визитные карты, скачивать купоны на скидки и так далее. Множество новых применений для NFC будет найдено в ближайшее время.
Эта статья описывает технологии, использующие NFC и способы их применения на сегодняшний день. Также показано, как использовать NFC в Android приложениях и, наконец, приведены два примера NFC приложений с исходными кодами.

Архитектура технологии NFC

NFC основана на RFID технологии с частотой 13.56 МГц и рабочей дистанцией до 10 см. Скорость обмена данными составляет до 424 кб/сек. По сравнению с другими коммуникационными технологиями, основным преимуществом NFC является быстрота и простота использования. На рисунке ниже видно расположение NFC среди других коммуникационных технологий.

Технология NFC имеет три режима: эмуляция NFC-карты, пиринговый режим и режим чтения/записи.

В режиме эмуляции карты NFC представляет собой аналог чипованной RFID карты со своим модулем безопасности, позволяющим защищать процесс покупки. В пиринговом режиме вы можете делиться информацией, например визитной карточкой, с другими NFC устройствами. В также можете устанавливать WiFi или Bluetooth соединения посредством NFC для передачи больших объемов данных. Режим чтения/записи предназначен для чтения или изменения NFC меток с помощью NFC устройств.
Каждый режим более подробно описан ниже.

Режим эмуляции NFC карты

NFC модуль обычно состоит из двух частей: NFC контроллера и элемента безопасности (ЭБ). NFC контроллер отвечает за коммуникации, ЭБ – за шифрацию и дешифрацию чувствительной к взлому информации.

ЭБ подключается к NFC контроллеру посредством шины SWP (Single Wire Protocol) или DCLB (Digital Contactless Bridge). Стандарты NFC определяют логический интерфейс между хостом и контроллером, позволяя им взаимодействовать через RF-поле. ЭБ реализуется с помощью встроенного приложения или компонента ОС.

Существует три варианта реализации ЭБ: можно встроить его в SIM-карту, SD-карту или в NFC чип.

Операторы связи, такие как CMCC (China Mobile Communication Corporation), Vodafone или AT&T обычно используют решение на SIM-карте, поощряя своих абонентов бесплатной заменой старых SIM-карт на новые, оснащенные NFC.

Пиринговый режим

Два NFC устройства могут легко взаимодействовать друг с другом напрямую, обмениваясь небольшими файлами. Для установления Bluetooth/WiFi соединения необходимо обменяться XML файлом специального формата. В этом режиме ЭБ не используется.

Режим записи/чтения

В данном режиме NFC устройство может читать и записывать NFC метки. Хорошим примером применения является чтение информации с оснащенных NFC «умных» постеров.

Введение в разработку NFC под Android

Android поддерживает NFC с помощью двух пакетов: android.nfc и android.nfc.tech.
Основными классами в android.nfc являются:
NfcManager: Устройства под Android могут быть использованы для управления любыми обнаруженными NFC адаптерами, но поскольку большинство Android устройств поддерживают только один NFC адаптер, NfcManager обычно вызывается с getDefaultAdapter для доступа к конкретному адаптеру.
NfcAdapter работает как NFC агент, подобно сетевому адаптеру на ПК. С его помощью телефон получает доступ к аппаратной части NFC для инициализации NFC соединения.
NDEF: Стандарты NFC определяют общий формат данных, называемый NFC Data Exchange Format (NDEF), способный хранить и передавать различные типы объектов, начиная с MIME и заканчивая ультра-короткими RTD-документами, такими как URL. NdefMessage и NdefRecord – два типа NDEF для определенных NFC форумом форматов данных, которые будут использоваться в коде-примере.
Tag: Когда устройство Android обнаруживает пассивный объект типа ярлыка, карты и т.д., он создает объект типа «метка», помещая его далее в целевой объект и в заключении пересылая в соответствующий процесс.
Пакет android.nfc.tech также содержит множество важных подклассов. Эти подклассы обеспечивают доступ к функциям работы с метками, включающими в себя операции чтения и записи. В зависимости от используемого типа технологий, эти классы разбиты на различные категории, такие как NfcA, NfcB, NfcF, MifareClassic и так далее.
Когда телефон со включенным NFC обнаруживает метку, система доставки автоматически создает пакет целевой информации. Если в телефоне имеется несколько приложений, способных работать с этой целевой информаций, пользователю будет показано окно с предложением выбрать одно из списка. Система доставки меток определяет три типа целевой информации, в порядке убывания приоритета: NDEF_DISCOVERED, TECH_DISCOVERED, TAG_DISCOVERED.
Здесь мы используем целевой фильтр для работы со всеми типами информации начиная с TECH_DISCOVERED до ACTION_TECH_DISCOVERED. Файл nfc_tech_filter.xml используется для всех типов, определенных в метке. Подробности можно найти в документации Android. Рисунок ниже показывает схему действий при обнаружении метки.

Пример 1. Разработка NFC приложения для чтения/записи меток.

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

Минимальную версию SDK, которую должно поддерживать ваше приложение — 10, объявите об этом в файле AndroidManifest.xml

In the onCreate function,you can apply the NfcAdapter: public void onCreate(Bundle savedInstanceState)

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

@Override protected void onNewIntent(Intent intent) < if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()))< mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // get the detected tag Parcelable[] msgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefRecord firstRecord = ((NdefMessage)msgs[0]).getRecords()[0]; byte[] payload = firstRecord.getPayload(); int payloadLength = payload.length; int langLength = payload[0]; int textLength = payloadLength - langLength - 1; byte[] text = new byte[textLength]; System.arraycopy(payload, 1+langLength, text, 0, textLength); Toast.makeText(this, this.getString(R.string.ok_detection)+new String(text), Toast.LENGTH_LONG).show(); >>

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

If (mytag==Null) < …… >else < …… write(message.getText().toString(),mytag); …… >private void write(String text, Tag tag) throws IOException, FormatException < NdefRecord[] records = < createRecord(text) >; NdefMessage message = new NdefMessage(records); // Get an instance of Ndef for the tag. Ndef ndef = Ndef.get(tag); // Enable I/O ndef.connect(); // Write the message ndef.writeNdefMessage(message); // Close the connection ndef.close(); >

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

Пример 2. Разработка NFC-приложения, использующего карты MifareClassic

В этом примере для чтения мы будем использовать карты MifareClassic и соответствующий им тип метки. Карты MifareClassic широко используются для различных нужд, таких как идентификация человека, автобусный билет и т.д. В традиционной карте MifareClassic область хранения разбита на 16 зон, в каждой зоне 4 блока, и каждый блок может хранить 16 байт данных.
Последний блок в зоне называется трейлером и используется обычно для хранения локального ключа чтения/записи. Он содержит два ключа, А и В, 6 байт длиной каждый, по умолчанию забитые 00 или FF, в зависимости от значения MifareClassic.KEY_DEFAULT.
Для записи на карту Mifare вы, прежде всего, должны иметь корректное значение ключа (что играет защитную роль), а также успешно пройти аутентификацию.

  android.nfc.tech.MifareClassic  

Пример того, как читать карту MifareClassic:

private void processIntent(Intent intent) < Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); for (String tech : tagFromIntent.getTechList()) < System.out.println(tech); >boolean auth = false; MifareClassic mfc = MifareClassic.get(tagFromIntent); try < String metaInfo = ""; //Enable I/O operations to the tag from this TagTechnology object. mfc.connect(); int type = mfc.getType(); int sectorCount = mfc.getSectorCount(); String typeS = ""; switch (type) < case MifareClassic.TYPE_CLASSIC: typeS = "TYPE_CLASSIC"; break; case MifareClassic.TYPE_PLUS: typeS = "TYPE_PLUS"; break; case MifareClassic.TYPE_PRO: typeS = "TYPE_PRO"; break; case MifareClassic.TYPE_UNKNOWN: typeS = "TYPE_UNKNOWN"; break; >metaInfo += "Card type:" + typeS + "n with" + sectorCount + " Sectorsn, " + mfc.getBlockCount() + " BlocksnStorage Space: " + mfc.getSize() + "Bn"; for (int j = 0; j < sectorCount; j++) < //Authenticate a sector with key A. auth = mfc.authenticateSectorWithKeyA(j, MifareClassic.KEY_DEFAULT); int bCount; int bIndex; if (auth) < metaInfo += "Sector " + j + ": Verified successfullyn"; bCount = mfc.getBlockCountInSector(j); bIndex = mfc.sectorToBlock(j); for (int i = 0; i < bCount; i++) < byte[] data = mfc.readBlock(bIndex); metaInfo += "Block " + bIndex + " : " + bytesToHexString(data) + "n"; bIndex++; >> else < metaInfo += "Sector " + j + ": Verified failuren"; >> promt.setText(metaInfo); > catch (Exception e) < e.printStackTrace(); >>
Об авторах

Songyue Wang и Liang Zhang — инженеры в Intel Software and Service Group, разрабатывающие мобильные приложения, в том числе и для Android, и оптимизирующие их под платформу х86.

  • nfc
  • android development
  • Блог компании Intel
  • Разработка под Android

Функция ReadNFC

Считывает метку радиочастотной связи ближнего действия (NFC).

Description

Используйте функцию ReadNFC для чтения NFC-метки, которая находится близко к вашему устройству. При вызове экран отображает инструкции по сканированию NFC-метки, и возврат происходит только после сканирования метки или истечения времени ожидания.

Столбец Тип Описание:
Идентификатор Текст Идентификатор тегов NFC, если он доступен.
NDEFRecords Таблицу Поддерживаемые записи NDEF, найденные в теге.

Одна запись NDEFRecord содержит следующие столбцы:

Столбец Тип Описание:
RTD Текст Определение типа записи (RTD) для метки. В настоящее время поддерживаются только Текст и URI.
TNF Число Формат имени типа (TNF) для метки. В настоящее время поддерживаются только форматы TNF Хорошо известно(1).
Текст Текст Текстовая полезная нагрузка тега NFC, если RTD равно ТЕКСТ, пусто в противном случае.
URI Гиперссылка Полезная нагрузка универсального кода ресурса (URI) NFC-метки, если RTD равно URI, пусто в противном случае.

Если запись NDEF не поддерживается (например, TNF не относится к типу Хорошо известный), то она не будет возвращена как часть таблицы NDEFRecords.

Обязательно проверяйте значения полезной нагрузки на значение пусто с помощью функции IsBlank перед ее использованием. Вам не нужно проверять значения RTD и TNF самостоятельно, поскольку они должны быть правильными значениями, чтобы поля Текст и URI имели значение, отличное от пусто.

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

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

Функция ReadNFC может использоваться только в формулах поведения.

  • ReadNFC поддерживается только при запуске приложения в собственном мобильном приложении, например в приложениях iOS и Android. Даже с поддерживаемым плеером устройство может не поддерживать NFC. Если в вашем приложении включен параметр Управление ошибками на уровне формул, функция вернет ошибку. В противном случае пользователю будет показано сообщение, и функция вернет пустую запись.
  • Убедитесь, что на вашем устройстве включена настройка NFC, чтобы использовать эту возможность.

Синтаксис

ReadNFC()

Примеры

Формула Описание: Результат
ReadNFC().Identifier Возвращает идентификатор тега NFC, если он существует. 04A1C301314003
ReadNFC().NDEFRecords Возвращает таблицу записей NDEF, найденных в теге NFC, если они имеют поддерживаемый тип и полезные данные. Результат NDEFRecords с примером записи.

Пошаговый пример

  1. Создайте пустое приложение на основе холста с форматом Телефон.
  2. Добавьте элемент управления Button.
  3. Дважды щелкните элемент управления кнопки, чтобы изменить текст кнопки на Считать тег NFC (или измените свойство Text).
  4. Установите для свойства OnSelect элемента управления кнопки эту формулу, которая будет добавлять элемент в нашу коллекцию:
With(ReadNFC(), Set(id, Coalesce(Identifier, "No ID")); ForAll(NDEFRecords, Collect(tagRecords, ))) 

Приведенная выше формула введена как свойство OnSelect кнопки.Эта формула считывает тег NFC, используя функцию ReadNFC() , и отображает информацию о типе в отношении результата. Затем она собирает прочитанные теги NFC для заполнения коллекции tagRecords , которая будет использоваться для коллкции на следующих шагах.

  • Добавьте элемент управления Gallery с пустым вертикальным макетом.
  • При появлении запроса выберите коллекцию tagRecords как источник данных для этой коллекции. Это действие задает свойство Items элемента управления Gallery. Источник данных для коллекции, выбранной в качестве tagRecords.
  • Переместите элемент управления Gallery так, чтобы он не перекрывал кнопку, и измените тип макета на Заголовок и подзаголовок. Макет коллекции.
  • Измените формулу Заголовок в элементе управления Gallery на ThisItem.Value и измените формулу Подзаголовок в элементе управления Gallery на ThisItem.ID. Вы также можете удалить NextArrow из элемента управления Gallery, так как он не используется.
  • Сохраните и опубликуйте приложение.
  • Поскольку функцию ReadNFC() нельзя использовать в Power Apps Studio или в веб-браузере, откройте свое приложение на мобильном устройстве. Совет Приложение может появиться на вашем мобильном устройстве с небольшой задержкой. Если вы не видите приложение в списке, попробуйте обновить список приложений. Приложение на мобильном устройстве с примером чтения тега NFC и результатом в коллекции.
  • Выберите Читать тег NFC и отсканируйте тег. Повторите процесс, чтобы добавить несколько тегов в свою коллекцию.
  • Чтение тегов NFC с Android

    Вам интересно, что такое NFC и как его можно интегрировать в ваши собственные приложения для Android? Этот урок быстро познакомит вас с этой темой, прежде чем погрузиться в нее и научит создавать простое приложение для чтения NFC!

    Что такое NFC?

    NFC – это сокращение от Near Field Communication . Это международный стандарт для бесконтактного обмена данными. В отличие от широкого спектра других технологий, таких как беспроводная локальная сеть и Bluetooth, максимальное расстояние между двумя устройствами составляет 10 см. Разработка стандарта началась в 2002 году компаниями NXP Semiconductors и Sony. NFC Forum , консорциум из более чем 170 компаний и членов, в который входят Mastercard, NXP, Nokia, Samsung, Intel и Google, разрабатывает новые спецификации с 2004 года.

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

    В этом уроке я хочу объяснить, как реализовать NFC с помощью Android SDK, какие подводные камни существуют и что нужно иметь в виду. Мы шаг за шагом создадим приложение, которое сможет читать содержимое тегов NFC, поддерживающих NDEF.

    NFC Technologies

    Существует множество тегов NFC, которые можно прочитать с помощью смартфона. Спектр варьируется от простых наклеек и брелоков до сложных карточек со встроенным криптографическим оборудованием. Тэги также отличаются по своей технологии чипов. Наиболее важным является NDEF, который поддерживается большинством тегов. Кроме того, следует упомянуть Mifare, поскольку это самая распространенная технология бесконтактных чипов в мире. Некоторые теги могут быть прочитаны и записаны, а другие – только для чтения или зашифрованы.

    В этом руководстве обсуждается только формат обмена данными NFC (NDEF).

    girogo-карты

    Добавление поддержки NFC в приложение

    Мы начинаем с нового проекта и пустой деятельности. Важно выбрать минимальную версию SDK уровня 10, потому что NFC поддерживается только после Android 2.3.3. Не забудьте выбрать собственное имя пакета. Я выбрал net.vrallev.android.nfc.demo , потому что vrallev.net является доменом моего сайта, а другая часть относится к теме этого приложения.

    Бесконтакт: что такое NFC и как программисту с ним работать

    Сейчас почти у каждого есть карты с поддержкой NFC, которыми можно оплатить покупку в одно касание, а ещё лучше это сделать смартфоном или даже умными часами ? Есть карты, которыми можно оплатить проезд, а также пополнить баланс с телефона (жаль вот только ввели такую систему не во всех городах, а в некоторых предпочли «изобрести велосипед» и использовали карты, которые несовместимы с NFC). А ещё можно просто прикоснуться телефоном к наушникам, и они сами образуют пару с вашим телефоном и в некоторых случаях даже включают Bluetooth.

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

    О чём точно стоит знать: NFC базируется на RFID. Зачастую эти две технологии ошибочно объединяют в одну, но они не являются одним и тем же. Хотя NFC-считыватели могут распознавать и перезаписывать некоторые RFID-метки, технология NFC даёт гораздо больше возможностей, чем RFID. NFC можно считать надстройкой над RFID, созданной для расширения платформы обмена данными.

    Итак, разберёмся в механике работы RFID и NFC и в том, чем они отличаются.

    RFID

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

    Теперь представьте, что Иван включил светильник, а его сосед, который сидит у себя дома, видит это и кратковременно включает светильник на своём крыльце, как будто передаёт Ивану «привет» со своего крыльца. Это активный RFID, он может работать на более длинные дистанции, так как приёмник имеет свой собственный источник питания и, более того, может генерировать собственный радиосигнал, не полагаясь на энергию, которую он поглотил от источника.

    RFID — это два таких крылечка. Иван и его сосед знают друг друга в лицо, но больше ничего не могут узнать друг о друге. Они не обмениваются какой-либо весомой информацией. RFID был создан для идентификации, а не коммуникации, поэтому RFID-метки содержат небольшой объём информации, порядка тысячи байт или меньше, которые можно считывать или перезаписывать с RFID-считывателей.

    NFC

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

    NFC разработали, основываясь на RFID, но для более сложного обмена данными между участниками. По-прежнему можно считывать пассивные RFID-метки с помощью NFC-считывателя и записать новые данные в их ограниченную память. Также NFC позволяет записывать информацию в определённый тип RFID-меток, используя стандартный формат, независимый от типа меток. Ещё можно взаимодействовать с другими NFC-устройствами дуплексным или двусторонним обменом. NFC-устройства могут обмениваться информацией о своих возможностях, делиться записями или устанавливать более длительное взаимодействие посредством других технологий.

    Например, можно прикоснуться телефоном с NFC к стереоустройству, у которого тоже есть NFC, и они опознают друг друга, узнают, что у обоих есть Wi-Fi модуль, и обменяются данными для последующего взаимодействия через Wi-Fi. После этого телефон начнёт трансляцию музыки на стереоустройство с помощью Wi-Fi. Телефон не будет транслировать музыку с помощью NFC по двум причинам:

    • Во-первых, потому что у NFC малый радиус действия, порядка десяти сантиметров, что позволяет уменьшить энергопотребление и избежать установления связи с другими устройствами, использующими ту же технологию передачи данных.
    • Во-вторых, скорость передачи данных с помощью NFC ощутимо меньше в сравнении с другими технологиями (Wi-Fi, Bluetooth и т.д.). NFC не был создан для длительных высокоскоростных коммуникаций, а для обмена короткими сообщениями, мандатами (учётными записями с параметрами доступа пользователя, сформированными после его успешной аутентификации) и инициирования связи. Если вернуться к аналогии с крылечком, то NFC позволит вам начать общение с соседом или обменяться мнениями о погоде, но для более длительного разговора вы пригласите соседа на чай — это уже Wi-Fi, Bluetooth и другие расширенные протоколы обмена данными.

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

    Устройство не позволяет считать абсолютно всю свою память при использовании NFC, оно лишь даёт доступ к небольшому кусочку информации, необходимому для обмена. Пользователь может проконтролировать, какую информацию он передаёт и кому.

    Типы NFC-меток

    Существует четыре типа меток, описанных NFC-форумом, все они базируются на RFID-протоколах. Это делает NFC метки частично совместимыми со многими уже существующими RFID системами (например, Mifare и FeliCa). Хотя эти более старые системы не поддерживают NDEF, они, однако, могут опознавать NFC метки, которые совместимы с ними. Например, считыватель RFID, который предназначен для работы с метками Mifare Ultralight, может считать идентификационный номер метки NFC 2 типа, хоть и не может прочитать закодированную NDEF информацию. Есть также пятый тип, который совместим с технологией, но при этом не является частью NFC-спецификации.

    Типы 1, 2 и 4 основаны на ГОСТ Р ИСО/МЭК 14443A (состоит из четырёх частей: 1, 2, 3, 4), тип 3 — на ГОСТ Р ИСО/МЭК 18092. Более подробно про каждый из типов можно прочитать под спойлером.

    • Основан на ГОСТ Р ИСО/МЭК 14443A;
    • Может быть как только для чтения, так и для чтения/записи;
    • Содержит от 96 байт до 2 кбайт памяти;
    • Нет защиты данных от коллизий (прим. — коллизии могут возникнуть; когда два активных источника передают данные одновременно);
    • Примеры: Innovision Topaz, Broadcom BCM20203.
    • Аналогично типу 1 основан на NXP/PhilipsMifareUltralight метках (ГОСТ Р ИСО/МЭК 14443A);
    • Может быть как только для чтения, так и для чтения/записи;
    • Содержит от 96 байт до 2 кбайт памяти;
    • Скорость взаимодействия 106 кбит/с;
    • Поддержка анти-коллизий;
    • Пример: NXP Mifare Ultralight.
    • Основан на метках SonyFeliCa (ГОСТ Р ИСО/МЭК 18092 и JIS-X-6319-4) без поддержки шифрования и аутентификации, которая предоставлена спецификацией FeliCa;
    • Может быть либо только для чтения, либо для чтения/записи;
    • Скорость взаимодействия 212 или 424 кбит/с;
    • Поддержка анти-коллизий;
    • Пример: Sony FeliCa.
    • Аналогично типу 1, тип 4 основан на ГОСТ Р ИСО/МЭК 14443A;
    • Может быть либо только для чтения, либо для чтения/записи;
    • 2, 4 или 8 кбайт памяти;
    • Скорость взаимодействия 106, 212 или 424 кбит/с;
    • Поддержка анти-коллизий;
    • Пример: NXP DESFire, SmartMX-JCOP.

    Пятый тип является собственностью NXPSemiconductors и, вероятно, самым распространённым на сегодняшний день MifareClassictag (ГОСТ Р ИСО/МЭК 14443A):

    • Память: 192, 768 или 3584 байта;
    • Скорость взаимодействия 106 кбит/с;
    • Поддержка анти-коллизий;
    • Пример: NXP Mifare Classic 1K, Mifare Classic 4K, Mifare Classic Mini.

    Алгоритм работы NFC

    У NFC, как и у RFID, при обмене есть инициатор и цель, но новая технология позволяет куда больше, чем простой обмен идентификатором и чтение или запись информации цели. Наиболее значимым различием между этими двумя технологиями является то, что у NFC целями часто являются программируемые устройства, такие как смартфоны. Это означает, что можно обмениваться не только статичными данными, но и каждый раз генерировать ответ на запрашиваемую инициатором информацию.

    У NFC устройств есть два режима взаимодействия. Если инициатор излучает радиочастотные волны, а цель за счёт инициатора получает питание, то такой режим взаимодействия называют пассивным. При активном режиме у инициатора и цели свои собственные источники питания, и они независимы друг от друга. Данные режимы совпадают с режимами RFID.

    NFC устройства также имеют три способа работы. Они могут работать в режиме чтения информации с цели или записи на неё. Они могут эмулировать карты, ведя себя как RFID-метки, когда они в поле другого NFC или RFID устройства. Или они могут работать в режиме peer-to-peer (P2P), в котором они обмениваются данными сразу в обоих направлениях.

    Первым главным отличием NFC от RFID является способ взаимодействия peer-to-peer, который реализован с помощью ГОСТ Р ИСО/МЭК 18092. Обмен данными P2P реализуется двумя протоколами — протоколом подуровня управления логической связью (LLCP — logical link control protocol) и простым протоколом обмена данными NDEF (SNEP — simple NDEF exchange format).

    Архитектура NFC

    В архитектуре NFC есть несколько уровней. Самый низкий из них — физический, который реализован ЦПУ и другим аппаратным комплексом, через который происходит взаимодействие. В середине находятся данные о пакетах и транспортный уровень, затем формат данных уровней, и в конце программное обеспечение.

    Бесконтакт: что такое NFC и как программисту с ним работать 1

    На физическом уровне NFC работает по алгоритму, описанному в ГОСТ для RFID (ГОСТ Р ИСО/МЭК 14443-2-2014), где говорится о маломощных радиосигналах частотой 13,56 МГц. Затем идёт уровень, который описывает разбивку потока данных на фреймы (ГОСТ Р ИСО/МЭК 14443-3-2014). Любые радиоконтроллеры, которые используются в телефоне, планшете или подсоединяются к компьютеру или микроконтроллеру, являются отдельными аппаратными компонентами. Они взаимодействуют с главным процессором посредством одного или нескольких стандартных последовательных протоколов между устройствами: универсальный асинхронный приёмопередатчик (UART), последовательный периферийный интерфейс (SPI), последовательная шина данных для связи интегральных схем (I2C) или универсальная последовательная шина (USB).

    Над этим находится несколько протоколов команд RFID, базирующихся на двух спецификациях. NFC чтение и запись меток базируется на оригинальном RFID ГОСТ Р ИСО/МЭК 14443A. Протоколы Philips/NXP Semiconductors Mifare Classic и Mifare Ultralight и NXP DESFire совместимы с ГОСТ Р ИСО/МЭК 14443A. Обмен данными P2P NFC базируется на ГОСТ Р ИСО/МЭК 18092. Также на этом же стандарте базируются RFID-карты и метки Sony FeliCa, которые доступны в основном в Японии. Можно читать и записывать метки, основанные на этих стандартах, и не использовать NFC.

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

    NDEF

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

    Есть несколько распространённых типов NDEF-записей:

    1. Обычные текстовые записи. В них можно отправить любую строку, они не содержат инструкций для цели, но содержат метаданные об языке текста и кодировке.
    2. URI. Такие записи содержат данные об интернет-ссылках. Цель, получившая такую запись, откроет её в том приложении, которое сможет её отобразить. Например, веб-браузере.
    3. Умная запись. Содержит не только веб-ссылки, но и текстовое описание к ним, чтобы было понятно, что находится по этой ссылке. В зависимости от данных записи телефон может открыть информацию в нужном приложении, будь то SMS или e-mail, либо сменить настройки телефона (громкость звука, яркость экрана и т.д.).
    4. Подпись. Она позволяет доказать, что информация, которая была передана или передаётся, достоверна.

    Можно использовать несколько видов записей в одном NDEF-сообщении.

    Можно представить сообщение как параграф, а записи — как предложения. Параграф — определённая единица информации, которая содержит одно или несколько предложений. Тогда как предложение — меньшая единица информации, которая содержит всего одну идею. Например, можно в виде абзаца сделать приглашения на день рождения и написать в отдельных предложениях данные о дате, времени и месте проведения, а с помощью NDEF-сообщений передать друзьям напоминание об этом событии, где будет текстовое сообщение с описанием события, умную запись с местом и веб-ссылку с тем, как добраться до этого места.

    Второе главное различие между NFC и RFID — формат обмена данными NFC (NDEF — NFC data exchange format). NDEF определяет формат данных в сообщениях, которые в свою очередь состоят из NDEF записей. Есть несколько видов записей, о которых будет рассказано более подробно чуть ниже. NDEF делает возможным с помощью программного кода управлять процессом чтения и записи NFC-меток, обмена данными при помощи peer-to-peer и эмулирования карт.

    Структура NDEF

    NDEF содержит информацию о байтовом представлении сообщений, которые могут содержать несколько записей. У каждой записи есть заголовок, в котором находятся метаданные (тип, длина и т.д.), и информацию для отправки. Если вернуться к аналогии с параграфом, то параграф формируется из предложений, относящихся к одной теме, так и в NDEF-сообщениях — хорошо, когда все записи относятся к одной тематике.

    Бесконтакт: что такое NFC и как программисту с ним работать 2

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

    NDEF-запись содержит информацию для пересылки и метаданные, как эту информацию интерпретировать. Каждая запись может быть разного типа, о чем объявляется в заголовке этой записи. Также в заголовке описывается какое место занимает запись в сообщении, после заголовка следует информация. На рисунке ниже представлена полная информация о расположении бит и байт информации в NDEF-записи. Информация для пересылки занимает большую часть записи. Тип информации уточняет, как её интерпретировать, идентификатор информации опционален и используется для пересылки большого количества записей или перекрёстного обмена данными.

    Бесконтакт: что такое NFC и как программисту с ним работать 3

    Какой длины может быть NDEF-сообщение?

    Место на информацию в NDEF-записи ограниченно по размерам 2^32-1 байтами, однако можно делать цепочки записей внутри сообщения, чтобы переслать информацию большего размера. В теории нет ограничений на NDEF-сообщения, но на практике размер сообщения ограничивается возможностями устройств или меток, участвующих в обмене информацией. Если в обмене участвуют только устройства, то длина сообщения будет ограничена вычислительной мощностью самого слабого из устройств, но стоит учесть, что устройства придётся долго держать рядом для пересылки всех данных. При взаимодействии смартфона и карты длина сообщения будет ограничена размером памяти карты.

    В общем, обмен данными через NFC достаточно быстрый. Человек подносит мобильное устройство к метке, происходит краткий обмен информацией, и человек идёт дальше. Данная технология не была спроектирована для длительных обменов информацией, потому что устройства в буквальном смысле должны находится в паре сантиметров друг от друга. Для того чтобы передать большой объем информации, устройства придётся держать друг рядом с другом длительное время, это может быть неудобным. Если нужно длительное взаимодействие между устройствами, то можно воспользоваться NFC для быстрого обмена данными о возможностях устройств и последующего включения одного из более подходящих способов передачи данных (Bluetooth, Wi-Fi и т.д.).

    Читаем NDEF-сообщение

    Когда телефон на Android считывает NFC-метку, он сначала её обрабатывает и распознает, а затем передаёт данные о ней в соответствующее приложение для последующего создания intent. Если с NFC может работать больше одного приложения, то появится меню выбора приложения. Система распознавания определяется тремя intent, которые перечислены в порядке важности от самой высокой до низкой:

    1. ACTION_NDEF_DISCOVERED : Этот intent используется для запуска аctivity, если в метке содержится NDEF-сообщение. Он имеет самый высокий приоритет, и система будет запускать его в первую очередь.
    2. ACTION_TECH_DISCOVERED : Если никаких activity для intent ACTION_NDEF_DISCOVERED не зарегистрировано, то система распознавания попробует запустить приложение с этим intent. Также этот intent будет сразу запущен, если найденное NDEF-сообщение не подходит под MIME-тип или URI, или метка совсем не содержит сообщения.
    3. ACTION_TAG_DISCOVERED : Этот intent будет запущен, если два предыдущих intent не сработали.

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

    Бесконтакт: что такое NFC и как программисту с ним работать 4

    Когда это возможно, запускается intent ACTION_NDEF_DISCOVERED , потому что он наиболее специфичный из трёх. Более того, с его помощью можно будет запустить ваше приложение.

    Если activity запускается из-за NFC intent, то можно получить информацию с отсканированной NFC-метки из этого intent. Intent может содержать следующие дополнительные поля (зависит от типа отсканированной метки):

    • EXTRA_TAG (обязательное): объект Tag, описывающий отсканированную метку.
    • EXTRA_NDEF_MESSAGES (опциональное): Массив NDEF-сообщений, просчитанный с метки. Это дополнительное поле присуще только intent ACTION_NDEF_DISCOVERED .
    • EXTRA_ID (опциональное): Низкоуровневый идентификатор метки.

    Ниже представлен пример, проверяющий intent ACTION_NDEF_DISCOVERED и получающий NDEF-сообщения из дополнительного поля.

    override fun onNewIntent(intent: Intent) < super.onNewIntent(intent) . if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) < intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also < rawMessages ->val messages: List = rawMessages.map < it as NdefMessage >// Обработка массива сообщений. . > > > 
    @Override protected void onNewIntent(Intent intent) < super.onNewIntent(intent); . if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) < Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) < NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) < messages[i] = (NdefMessage) rawMessages[i]; >// Обработка массива сообщений. . > > > 

    Также объект Tag можно получить из intent, который будет содержать полезную информацию и позволит перечислить технологии метки:

    val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)

    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

    Создаём распространённые NDEF-записи

    Существует несколько методов для создания NDEF-записи: createUri() , createExternal() и createMime() . Лучше использовать один из них во избежание ошибок, которые могут возникнуть при создании записи вручную. Все примеры, представленные ниже, следует отправлять первым сообщением при записи метки, либо сопряжением с другим устройством.

    TNF_ABSOLUTE_URI (тип URI, зависит от типа)

    Создать NDEF-запись TNF_ABSOLUTE_URI можно следующим образом:

    val uriRecord = ByteArray(0).let < emptyByteArray ->NdefRecord( TNF_ABSOLUTE_URI, "https://tproger.ru/category/news/".toByteArray(Charset.forName("US-ASCII")), emptyByteArray, emptyByteArray ) > 
    NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI , "https://tproger.ru/category/news/".getBytes(Charset.forName("US-ASCII")), new byte[0], new byte[0]); 

    Intent-фильтр для такой NDEF-записи будет таким:

    TNF_MIME_MEDIA (MIME-тип, зависит от типа записи)

    Создать NDEF-запись TNF_MIME_MEDIA можно следующим образом:

    1. Используя метод createMime() :

    val mimeRecord = NdefRecord.createMime( "application/vnd.com.example.android.beam", "Beam me up, Android".toByteArray(Charset.forName("US-ASCII")) ) 
    NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam", "Beam me up, Android".getBytes(Charset.forName("US-ASCII"))); 

    2. Создав NdefRecord вручную:

    val mimeRecord = Charset.forName("US-ASCII").let < usAscii ->NdefRecord( NdefRecord.TNF_MIME_MEDIA, "application/vnd.com.example.android.beam".toByteArray(usAscii), ByteArray(0), "Beam me up, Android!".toByteArray(usAscii) ) > 
    NdefRecord mimeRecord = new NdefRecord( NdefRecord.TNF_MIME_MEDIA , "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")), new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII"))); 

    Intent-фильтр для такой NDEF-записи будет таким:

    TNF_WELL_KNOWN с RTD_TEXT (MIME-тип с записью простого текста)

    Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:

    fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord
    public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8)

    Intent-фильтр для такой NDEF-записи будет таким:

    TNF_WELL_KNOWN с RTD_URI (тип URI, базирующийся на полезной информации)

    Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:

    1. Используя метод createUri(String) :

    val rtdUriRecord1 = NdefRecord.createUri(«http://example.com»)

    NdefRecord rtdUriRecord1 = NdefRecord.createUri(«http://example.com»);

    2. Используя метод createUri(Uri) :

    val rtdUriRecord2 = Uri.parse("http://example.com").let < uri ->NdefRecord.createUri(uri) > 
    Uri uri = Uri.parse("http://example.com"); NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri); 

    3. Создав NdefRecord вручную:

    val uriField = "example.com".toByteArray(Charset.forName("US-ASCII")) val payload = ByteArray(uriField.size + 1) //добавление 1 для префикса URI payload [0] = 0x01 //префикс http://www. к URI System.arraycopy(uriField, 0, payload, 1, uriField.size) //добавление URI к полезной информации val rtdUriRecord = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, ByteArray(0), payload) 
    byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII")); byte[] payload = new byte[uriField.length + 1]; //добавление 1 для префикса URI payload[0] = 0x01; //префикс http://www. к URI System.arraycopy(uriField, 0, payload, 1, uriField.length); //добавление URI к полезной информации NdefRecord rtdUriRecord = new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload); 

    Intent-фильтр для такой NDEF-записи будет таким:

    Более подробно про работу с NDEF-записями на Android можно почитать здесь.

    Использование NFC

    Есть множество возможностей использования NFC:

    • Режим эмуляции карты позволяет использовать данную технологию для бесконтактных платежей, например Google Wallet, или для оплаты или получения билетов в общественном транспорте.
    • Есть несколько мобильных приложений, которые позволяют сохранить настройки для мобильного устройства на метках и в дальнейшем использовать их для быстрого изменения каких-либо настроек мобильного устройства (переход в режим виброзвонка, включения или выключения Wi-Fi на мобильном устройстве).
    • На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
    • NFC используется в системе здравоохранения для хранения идентификатора пациента и личных записей.
    • В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.

    Заключение

    Технология NFC добавляет многообещающую функциональность к технологии RFID. Наиболее значимое нововведение — формат обмена данными NFC (NDEF), который предоставляет возможность форматировать обычные данные в одну из четырёх технологий меток NFC. NDEF может быть использован как для обмена данными между устройством и меткой, так и для обмена между устройствами. Это делает NFC пригодным не только как способ идентификации, но и как средство обмена короткими блоками данных.

    Более подробно об NFC или NDEF можно почитать в книге Tom Igoe, Don Coleman, and Brian Jepson «Beginning NFC. Near Field Communication with Arduino, Android, and PhoneGap».

    Как сканировать NFC

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

    1. Концепция работы NFC
    2. Как отсканировать NFC-метку на Android
    3. Как сканировать NFC-метку на iPhone
    4. Как проверить, поддерживает ли ваш телефон NFC
    5. Как передавать данные с помощью NFC
    6. Что нужно запомнить

    Концепция работы NFC

    NFC, или ближнепольная связь, позволяет передавать данные на очень короткие расстояния (обычно не более 10 см). Для того чтобы начать использовать NFC, вам понадобится смартфон с поддержкой этой технологии и NFC-метка (также известная как метка RFID).

    Для передачи данных между вашим телефоном и NFC-меткой необходимо использовать определенный тип данных, известный как NDEF (NFC Data Exchange Format). Чтобы начать сканирование NFC-метки, создайте экземпляр объекта NDEFReader и вызовите метод scan(), который вернет промис.

    Как отсканировать NFC-метку на Android

    1. Выключите и включите экран своего телефона.
    2. Приложите карту или другую NFC-метку к задней панели телефона.
    3. На экране телефона появится уведомление о том, что телефон распознал NFC-метку.
    4. Нажмите на уведомление и выберите приложение для чтения меток.

    Как сканировать NFC-метку на iPhone

    В iOS 14 процесс сканирования NFC-меток на iPhone оказался довольно простым:

    1. Откройте настройки вашего iPhone.
    2. Прокрутите до пункта «Управление».
    3. В списке опций, которые можно добавить в центр управления, найдите «Считыватель тегов NFC».
    4. Добавьте эту опцию в центр управления, и теперь вы можете сканировать NFC-метки прямо с экрана своего iPhone.

    Как проверить, поддерживает ли ваш телефон NFC

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

    Как передавать данные с помощью NFC

    Чтобы передавать файлы через NFC, вам нужно включить NFC на обоих устройствах и Android Beam на устройстве Android. После этого, просто откройте фото в галерее и поднесите один смартфон к другому «спина» к «спине». На экране сразу появится предложение отправить файл. Вы можете выбрать несколько файлов и нажать на Android Beam в меню «Поделиться».

    Что нужно запомнить

    • NFC-метка (или метка RFID) необходимы для работы технологии ближней связи.
    • Для передачи данных между NFC-меткой и телефоном необходимо использовать NDEF.
    • Для сканирования NFC-метки на устройствах Android и iPhone есть свои инструкции.
    • Проверить, поддерживает ли ваш телефон NFC, можно в меню настроек.
    • Чтобы передавать файлы с помощью NFC, оба смартфона должны поддерживать эту технологию.

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

    Для того чтобы сканировать NFC-метки, необходимо создать объект NDEFReader. При вызове метода scan() возвращается промис. Если доступ к NFC-меткам не был получен ранее, пользователю будет отправлен запрос на разрешение. После получения доступа можно начинать сканирование меток. В результате сканирования будет получена информация о метке, такая как тип и содержимое. С помощью NFC-меток можно решить множество задач: например, оплатить покупку в магазине или открыть дверь в офисе с помощью мобильного устройства. Современные технологии NFC предоставляют широкие возможности для быстрого и удобного взаимодействия с окружающим миром.

    • Как отсканировать карту с помощью NFC
    • Отвечаем на вопросы
    • Эксперты рекомендуют
    • Как сделать скан ID паспорта

    NFC-метки: что это, примеры использования, как работает

    Благодаря технологии НФС люди могут значительно упростить свою жизнь. Она активно используется в метро, магазинах, кинотеатрах, дома и даже образовательных учреждениях. NFC метки не нуждаются в подзарядке и после их программирования пользователь сможет в одно касание осуществлять те или иные действие в любом месте.

    NFC-метки: что это, примеры использования, как работает

    Что это такое и зачем нужно

    NFC метка — что это? Она представляют собой микрочипы или пассивные устройства, способные программироваться и перепрограммироваться. Меткам характерен незначительный размер (диаметр — 25-35 мм, толщина — 1 мм). Такие параметры позволяют разместить чип, где угодно — в брелке, телефоне и т.д. Аббревиатура NFC расшифровывается, как Near Field Communication (связь ближнего поля). Применяется для бесконтактной передачи данных.

    Примеры использования

    Как используется НФС метки? Они устанавливаются в различных местах с целью передачи определенной информации.

    Метки НФС могут использоваться для:

    1. Проведения платежных операций. В данном случае НФС-чип должен стоять на карте, в телефоне или другом гаджете и в терминале. NFC-метки: что это, примеры использования, как работает
    2. Включение магнитофона, навигатора, вай-фая, блютуза и др. Особенно актуальным является программирование nfc меток в машинах.
    3. Открывания и закрывания окон, дверей, замков в домах. NFC-метки: что это, примеры использования, как работает
    4. Распространения телефонных номеров или других контактных данных, важной информации. Можно сделать запись, которая будет передаваться другим. Многие создают голосовые сообщения, которые воспроизводятся после контакта с НФС-меткой.
    5. Управления техникой в квартире (стиральной машинкой, телевизором и др.). NFC-метки: что это, примеры использования, как работает
    6. Включения и отключения режима полета, будильника, уведомлений.
    7. Синхронизации данных.
    8. Отслеживания груза.
    9. Пропуска в учебные заведения, кинотеатры, клубы и пр.

    Это не все примеры использования NFC меток. Список можно продолжать и дальше. Зная суть их работы и выполнив правильную настройку, будет несложно запрограммировать собственный телефон, бытовую технику или авто.

    Принцип работы NFC

    NFC-метки: что это, примеры использования, как работает

    Как работает NFC метка? Сигнал улавливается за счет двух антенн, которые располагаются в определенном радиусе. После считывания информации выполняется то или иное действие.

    Если нужно запрограммировать устройство, то целесообразно знать, что такое приложение nfc tools, как пользоваться им. Оно служит для создания и считывания задач. Подсказки разработчиков не дадут запутаться во время программирования.

    Внимание! NFC Tools будет функционировать только при имеющемся и включенном НФС-чипе в устройстве. Настроить можно несколько команд.

    Виды меток для оплаты

    Данные микрочипы бывают двух видов: с ограниченной совместимостью и универсальные.

    Второй совместим со всеми операционными системами и моделями гаджетов.

    Также различают метки 4-ех типов. Отличия их в объеме памяти и скорости передачи данных.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *