Запись тегов NFC с помощью Nexus S

У меня Gingerbread 2.3.4 на базе Nexus S, и недавно я получил несколько доступных для записи тегов NFC. Пока что я могу читать их как пустые теги, но не смог найти способ записать в них данные.
Все мои исследования привели меня к этой статье: Запись тегов с помощью Nexus S с января (до выпуска 2.3.4).

Как вы пишете теги NFC внутри своего приложения, используя Nexus S? Любые указатели?


person Marius Butuc    schedule 08.06.2011    source источник
comment
Я написал несколько с помощью бесплатного приложения NFC Tagwriter market.android.com/ подробности?id=com.nxp.nfc.tagwriter   -  person squigglesNbits    schedule 09.06.2011


Ответы (5)


Я обнаружил, что текст Android NFC API и руководство для разработчиков немного сложны для понимания, поэтому здесь может помочь небольшой пример кода. На самом деле это порт кода MIDP, который я использовал в устройствах Nokia 6212, поэтому я, вероятно, еще не все правильно понял об Android NFC API, но, по крайней мере, это сработало для меня.

Сначала мы создаем запись NDEF:

private NdefRecord createRecord() throws UnsupportedEncodingException {
    String text       = "Hello, World!";
    String lang       = "en";
    byte[] textBytes  = text.getBytes();
    byte[] langBytes  = lang.getBytes("US-ASCII");
    int    langLength = langBytes.length;
    int    textLength = textBytes.length;
    byte[] payload    = new byte[1 + langLength + textLength];

    // set status byte (see NDEF spec for actual bits)
    payload[0] = (byte) langLength;

    // copy langbytes and textbytes into payload
    System.arraycopy(langBytes, 0, payload, 1,              langLength);
    System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);

    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, 
                                       NdefRecord.RTD_TEXT, 
                                       new byte[0], 
                                       payload);

    return record;
}

Затем мы пишем запись как сообщение NDEF:

private void write(Tag tag) throws IOException, FormatException {
    NdefRecord[] records = { createRecord() };
    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();
}

Для записи в тег вам, очевидно, нужен объект Tag, который вы можете получить из Intent.

person Pasi Välkkynen    schedule 13.06.2011

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

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

Проект также включает в себя действия по чтению, записи и передаче шаблонов :-)

person ThomasRS    schedule 26.11.2012

NXP, производитель многих чипов, совместимых с NFC, создает бесплатное приложение с закрытым исходным кодом для управления тегами NFC. Я написал довольно много тегов с ним.

См. Приложение NXP NFC Tagwriter.

https://market.android.com/details?id=com.nxp.nfc.tagwriter

Если вы хотите написать код для этого, вам поможет ссылка inazaruk, или вы можете попробовать онлайн-книгу O'Reilly «Programming Android». Он имеет раздел NFC:

http://programming-android.labs.oreilly.com/ch16.html#ch18_id316624

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

person MakeSomething    schedule 09.06.2011
comment
Просто имейте в виду, что при записи тегов с помощью NXP, похоже, изменяется аутентификация тега, поэтому их можно будет переписать только с помощью этого приложения. - person neufuture; 28.06.2011
comment
И мне было интересно, почему NXP SDK не может записать на карту после того, как я написал сообщение NDEF с помощью собственного приложения NXP. Разве это не странно или что? - person AFD; 09.02.2015

Для записи данных NDEF вы можете использовать API Ndef.writeNdefMessage().

Если вы хотите записать данные, отличные от NDEF, вы можете использовать API-интерфейсы низкоуровневого приема, такие как NfcA.transceive(), NfcB.transceive() или IsoDep.transceive(). Вам нужно будет хорошо знать тег, с которым вы общаетесь, и его команды/ответы. Я не рекомендую это.

NDEF — это стандартный формат данных, который легко считывается Android и другими платформами NFC.

http://developer.android.com/reference/android/nfc/tech/Ndef.html#writeNdefMessage(android.nfc.NdefMessage)

person Nick Pelly    schedule 09.06.2011

Tagwriter от NXP — отличное приложение для написания тегов.

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

Сообщения в блоге для чтения и написание NFC теги проходят через код и сопровождаются видеоклипами из фактического семинара.

Надеюсь, это поможет некоторым разработчикам начать работу с NFC!

person Kelsey Whelan    schedule 02.08.2012
comment
Вы случайно не связаны с сайтом, на который ссылаетесь? - person Andrew Barber; 02.10.2012