Создание записи Ndef в формате обмена данными NFC

мы хотим записать в NFC следующие данные: (двумя отдельными строками)

Id:A112
Result:Pass

и застрял с NdefRecord созданием MIME-типа text/plain. На самом деле нашел два способа сделать это:

  • один с конструктором

    public NdefRecord (short tnf, byte[] type, byte[] id, byte[] payload)
    
  • другой, используя статический метод

    public static NdefRecord createMime (String mimeType, byte[] mimeData) 
    

Используя статический метод createMime, мы можем создать запись как:

byte[] stringBytes = "Id:A112Result:Pass".getBytes();
NdefRecord.createMime("text/plain", stringBytes);

Как добиться того же с помощью конструктора NdefRecord и в чем разница между двумя вышеуказанными способами? Также как мы записываем вышеуказанные данные (Id:A112Result:Pass) в NFC в две строки в одну запись.


person Anandaraja_Srinivasan    schedule 04.02.2014    source источник


Ответы (1)


Эквивалент

public static NdefRecord createMime (String mimeType, byte[] mimeData)

использование NdefRecordconstructor напрямую выглядит примерно так:

public NdefRecord myCreateMime (String mimeType, byte[] mimeData) {
    return new NdefRecord(
            NdefRecord.TNF_MIME_MEDIA,
            mimeType.getBytes("US-ASCII"),
            null,
            mimeData)
}

В общем, я бы избегал использования типа text/plain MIME. Этот тип MIME не придает данным полезной нагрузки никакого другого значения, кроме удобочитаемого текста. Если вы хотите передать конкретное значение, используйте соответствующий тип MIME, отражающий содержимое ваших данных полезной нагрузки, или лучше используйте настраиваемый внешний тип форума NFC.

Также обратите внимание, что тип MIME text/plain по умолчанию использует кодировку символов US-ASCII. Однако использование "Id:A112Result:Pass".getBytes() даст вам кодировку UTF-8 на Android. Поэтому вы должны явно указать кодировку символов при преобразовании строки в байты:

byte[] stringBytes = "Id:A112Result:Pass".getBytes("US-ASCII");

Наконец, если вы хотите вставить разрыв строки где-либо в тексте, вы должны использовать escape-символ новой строки \n или комбинацию возврата каретки + перевода строки \r\n (в зависимости от потребностей вашей целевой системы).

person Michael Roland    schedule 07.02.2014
comment
@Roland: Спасибо, Роланд. Ваш пост стал эффективной инициативой для моего исследования NFC. - person Anandaraja_Srinivasan; 03.03.2014