NFC с ACR122U и Android

http://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/

Я использую библиотеку Android, указанную выше, и пытаюсь читать / записывать теги NFC. Теги будут иметь формат, который я знаю (вероятно, что-то вроде JSON). Я могу запустить пример приложения и увидеть, что считыватель работает и обнаруживает теги NFC, но как мне на самом деле читать или писать их? API немного сбивает с толку. Буду признателен за любую оказанную помощь.

До сих пор в своем приложении я выяснил, как получить состояние считывателя и тип / имя считывателя, но ничего не касалось самих тегов NFC.

3 ответа

Вы можете использовать экземпляр Reader учебный класс (com.acs.smartcard.Reader) общаться с ридером и метками NFC, которые находятся в пределах досягаемости ридера.

В зависимости от версии ACR122U вам потребуется Reader.transmit() метод или Reader.control() метод (в сочетании с контрольным кодом Reader.IOCTL_CCID_ESCAPE) отправлять команды читателю. Соответствующие прямые команды для перечисления и доступа к тегам описаны в руководстве по интерфейсу прикладного программирования (см. Здесь или здесь, в зависимости от того, какая у вас версия считывателя).

Как только вы сможете получить доступ к тегам через Reader объект, вы могли бы реализовать спецификации операции тегов форума NFC для взаимодействия с тегами NFC.

Это тоже не работает. responseLength всегда 0. Это не должно быть. Эта команда является абсолютно правильной командой Read Card ID:{(byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x04и он отлично работает в примере Windows Java с тем же ACR122 USB-ридером:

// Transmit APDU
byte[] command =  {(byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x04};           
byte[] response = new byte[100];
int responseLength = 0;

try {
    responseLength = mReader.transmit(0, command, command.length, response,   response.length);
} catch (ReaderException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

TextView tv = (TextView)findViewById(R.id.main_text_view_response);
tv.setText( "resp: "+Integer.toString(responseLength) + ": "+ Integer.toString( response[0] ) );

Кроме SDK, предоставляемого ACS, вы можете попробовать Libnfc, который представляет собой низкоуровневый SDK с открытым исходным кодом и лицензией LGPL. Вы можете построить приложение на нем.

Libnfc поддерживает ACR122U как в Linux, так и в Windows.

Другие вопросы по тегам