NFC数据交换格式的Ndef记录创建

时间:2014-02-04 07:40:42

标签: android nfc ndef

我们希望将以下数据写入NFC :(在两个单独的行中)

Id:A112
Result:Pass

并且坚持使用NdefRecord创建MIME类型text / plain。实际上找到了两种方法:

  • 使用constuctor

    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中。

1 个答案:

答案 0 :(得分:1)

相当于

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

直接使用NdefRecord构造函数是这样的:

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()将在Android上为您提供UTF-8编码。因此,在将字符串转换为字节时,应明确指定字符编码:

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

最后,如果您想在文本中的任何位置插入换行符,则可以使用换行符\n或回车符+换行符\r\n的组合(取决于您的目标系统的需求)。