如何创建Mock Ndef消息

时间:2012-09-06 03:02:13

标签: java android nfc

我正在使用FakeTagsActivity

  

FakeTagsActivity - 一种启动标记的活动,就像它们一样   扫描。如果您无法访问支持NFC的设备,此功能非常有用   或标记。

它定义了一些假数据:

 /**
     * A plain text tag in english.
     */
    public static final byte[] ENGLISH_PLAIN_TEXT =
        new byte[] {(byte) 0xd1, (byte) 0x01, (byte) 0x1c, (byte) 0x54, (byte) 0x02, (byte) 0x65,
            (byte) 0x6e, (byte) 0x53, (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x20,
            (byte) 0x72, (byte) 0x61, (byte) 0x6e, (byte) 0x64, (byte) 0x6f, (byte) 0x6d,
            (byte) 0x20, (byte) 0x65, (byte) 0x6e, (byte) 0x67, (byte) 0x6c, (byte) 0x69,
            (byte) 0x73, (byte) 0x68, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x78,
            (byte) 0x74, (byte) 0x2e};

我如何制作这样的数据?

此致

3 个答案:

答案 0 :(得分:1)

数据是所谓的NDEF消息,包含一个或多个NDEF记录。您可以使用类NdefMessageNdefRecord创建它们。记录具有类型和有效负载(数据),有时还有ID。

您显示的示例是带有文本记录的NDEF消息。可以从NFC Forum site获取该类记录(及其他记录)的确切详细信息。

答案 1 :(得分:1)

我创建了一个NDEF editor作为Eclipse插件,可以让你以文件的形式定义很多“假”数据。

从res / raw目录加载文件很简单。

答案 2 :(得分:0)

看起来像

new byte[] {(byte) 0xd1, (byte) 0x01, (byte) 0x1c, (byte) 0x54, (byte) 0x02, (byte) 0x65,
        (byte) 0x6e,

是NFC标签标题("�Ten"),其余是实际文本("一些随机的英文文本。")

修改 - 请注意,其中一些数字不会翻译成可见字符(0x01和0x02) - 这就是为什么有6个数字序列而且只有4个字符的原因。这也是为什么他们必须像他们一样构建byte []而不是仅使用字符串 - 只需复制"�Ten"变成一个字符串将是不一样的 - 所以不要尝试: - )

这些字节是ASCII字符的十六进制代码 - 我可以用PHP解码它们 -

php -r "print chr(0xd1).chr(0x01).chr(0x1c).chr(0x54) . chr(0x02) . chr(0x65).chr(0x6e).chr(0x53).chr(0x6f).chr(0x6d).chr(0x65).chr(0x20).chr(0x72).chr(0x61).chr(0x6e).chr(0x64).chr(0x6f).chr(0x6d).chr(0x20).chr(0x65).chr(0x6e).chr(0x67).chr(0x6c).chr(0x69).chr(0x73).chr(0x68).chr(0x20).chr(0x74).chr(0x65).chr(0x78).chr(0x74).chr(0x2e);"
  

�TenSome随机英文文本。

ASCII表 - http://www.asciitable.com/

如果您想制作其他代码,则必须查找规格以了解您要发送的代码类型 - Google可以为您提供帮助

编辑 - 根据您的评论转换它的PHP代码(我只是不想查找java函数,即使我做了你也不得不写一堆代码只是为了能够运行/查看输出 - 对于像这样的东西,PHP是如此快得多)

$text = 'Some random english text.';
for ($i = 0; $i < strlen($text); $i++) {
   print " (byte) 0x" . dechex(ord(substr($text,$i,1))) .',';
}