如何使用Android NFC NdefRecord / NdefMessage方法设置Id值

时间:2014-08-07 22:02:54

标签: android nfc ndef

有没有办法单独在NFC NdefRecord中设置Id值?由于存在NdefRecord.getId()方法,因此API中似乎存在漏洞,但没有等效的NdefRecord.setID()。

有几种方法可以创建NdefRecord,但是没有一种方法具有Id字段。例如, public static NdefRecord createExternal(String domain,String type,byte [] data); 允许设置域名&输入但没有Id字段。

另外,令人讨厌的是NdefRecord.getType()方法返回整个 字符串(域+类型),而不仅仅是设置的类型。

1 个答案:

答案 0 :(得分:0)

不,一旦创建了NdefRecord对象,它就是只读的。这不仅是ID字段的情况,也是所有其他字段的情况。

我认为create*()方法没有设置ID字段选项的原因是NDEF记录中的ID字段(其目的是在多个记录之间创建引用)很少使用

您可以做的是创建没有ID字段的记录:

NdefRecord tempRecord = NdefRecord.createExternal("example.com", "mytype", myPayload);

然后根据从该记录获取的值创建一个新实例,并包括您的ID字段:

NdefRecord record = new NdefRecord(tempRecord.getTnf(), tempRecord.getType(), myId, tempRecord.getPayload());

getType()返回整个Type字段(包括域)的原因是NdefRecord对象是任何NDEF记录的简单通用包装器(无论它是否是外部类型记录)或其他东西)并且只返回记录的二进制表示中实际包含的值。仅返回特定于域的类型名称将不会产生,因为无法知道如何解释它。在我看来,如果getType()方法实际返回完整的规范类型URN" urn:nfc:ext:example.com:mytype"。

更有意义。