2015-04-18 11 views
0

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

В настоящее время я использую этот код:

if (intent.getAction() != null && NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) 
{ 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
} 

Может кто-нибудь запятнать, как я могу получить полезную нагрузку тега?

Технологии карты: android.nfc.tech.IsoDep и android.nfc.tech.NfcA.

+0

Это зависит от технологии карты, типа карты (памяти, javacard), как хранятся данные, ... Нет никакого общего метода для получения данных с дебетовой карты и идентификационной карточки студента. – LaurentY

+0

Технологии карты - android.nfc.tech.IsoDep, android.nfc.tech.NfcA. –

ответ

0

Вы можете получить NfcA объект, как это:

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
NfcA nfcA = NfcA.get(tag); 

После вы можете общаться с тегом, посылая APDU «S, как это:

byte[] apdu = [...]; 
byte response = nfcA.transceive(apdu); 
1

Получение полезной информации из тега, не ЦНК/смарт-карта сильно зависит от того, какой тип тега вы используете. Метки/смарт-карты могут варьироваться от простых хранилищ данных, используя плоскую структуру линейной памяти, над хранилищами данных с использованием структуры памяти на основе файловой системы, для смарт-карты процессора, содержащей исполняемый программный код и данные.

В вашем случае тег основан на технологиях NfcA + IsoDep (т. Е. Он реализует транспортный протокол, стандартизованный в стандарте ISO/IEC 14443-4 типа A). Поэтому маловероятно, что ваш тег принадлежит к группе простых линейно-адресуемых тегов памяти. Вместо этого более вероятно (хотя и не обязательно верно), что ваш тег реализует некоторый протокол связи и, возможно, некоторые файловые системы, подобные стандарту в ISO/IEC 7816-4.

В любом случае вам нужно узнать/узнать и реализовать протокол, который говорит тэг, чтобы извлекать из него какие-либо данные. Если ваш «тег» является платежной картой, это может быть указано в EMV Contactless Specifications for Payment Systems. Если ваш тег является паспортом, это указано в ICAO 9303.

  • Если тег является тегом памяти с макетом плоской памяти, то, как правило, имеет простые команды чтения, которые принимают адреса смещения и длины в качестве параметров. Кроме того, могут быть механизмы контроля доступа, которые требуют от вас подтверждения доказательств ключа/пароля.

  • Если ваш тег является тегом памяти с макетом памяти на основе файловой системы, у него обычно будут команды для выбора и доступа к файлам. Это может быть основано на ISO/IEC 7816-4. Кроме того, могут быть механизмы контроля доступа, которые требуют от вас подтверждения доказательств ключа/пароля.

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