将NFC设备用作NFC标签

4

我希望我的安卓设备可以像NFC标签一样使用。是否有可能将NFC设备用作NFC标签?我该如何实现?我已经读/写标签,以及在设备之间传输数据。


我认为这取决于你的设备是仅仅作为读取器还是可以充当标签,但是你可以开发一个软件,它可以作为存储并在读取器尝试读取时发送响应,我想是这样的 ;) - Farrokh
这个示例演示了如何使用Android 4.4中添加的“主机卡模拟”功能来模拟NFC卡。https://developer.android.com/samples/CardEmulation/index.html(我自己没有使用过卡模拟,但这可能会有用) - Daniel
2个回答

7
根据您的NFC设备,这可能是可能的。然而,我不同意kamituel的看法,即这是通过Android Beam由多个应用程序完成的。Android Beam使用NFC的点对点模式(peer-to-peer mode),虽然它可能具有类似的效果,但与使用一个设备作为读取器(reader/writer mode)和一个设备作为标签不同。点对点模式使用不同的协议栈进行通信,而不是读写器模式。即在点对点模式下,使用NDEF(SNEP上面的LLCP)进行通信,而在读写器模式下,使用NDEF(其中一种标签操作规范)访问NFC标签。因此,两个协议栈仅具有相同的数据表示层(NDEF)。在NFC环境中,NDEF(NFC数据交换格式)抽象了实际的通信部分,并且可以使应用程序独立于所使用的数据传输。但是,Android在引入其Beam UI时未能使其可用。如果您想要模拟带有NFC标签的NFC设备是安卓设备,则在模拟NFC标签时将有一些要求和限制。
  • 模拟设备需要运行Android 4.4或更高版本。
  • 模拟设备需要支持基于主机的卡模拟。这不适用于许多带有NXP PN544 NFC控制器的设备。
  • 您只能根据NFC Forum Type 4 Tag Operation规范模拟NFC标签。这是由于Android HCE中的限制,仅允许在ISO / IEC 14443-4之上模拟ISO / IEC 7816-4应用程序结构。

与HCE功能并行的是,Android设备还将向其他设备宣布其点对点模式功能。因此,如果您想使用另一个Android设备访问Android HCE模拟的NFC标签,则该其他Android设备将看到点对点模式功能,并且不会自动处理来自模拟标签的NDEF消息。

为了克服这个限制,阅读Android设备也需要安装Android 4.4或更高版本。从该平台版本开始,您可以使用阅读器模式API禁用点对点模式发现。只有这样,您才能从第二个Android设备访问模拟的NFC标签。

1
是的,这是可能的。多个应用程序正在执行此操作。一个例子是浏览器应用程序,它将导致对等设备打开相同的页面。通过这样做,浏览器使对等设备在阅读被动NFC标签时表现得几乎相同。
关键是向对等设备发送有效的NDEF记录。例如,为了使对等设备使用给定的URL打开浏览器,您可以使用以下记录:
- TNF:知名(0x01,根据[1]) - 类型:“U”-(0x55,根据[2]) - 负载:URL-通常是UTF-8编码的,可能缩写(有关描述,请参见[2]) - ID:null(您可以在此处放置一些值,但不是必要的)
您可以看到NDEF记录字段的值因您想提供的内容而异。其中一些是URI(如上所示),文本记录,智能海报等。
请参考NdefRecord类。
[1] NFCForum-TS-NDEF_1.0
[2] NFCForum-TS-RTD_URI_1.0

谢谢回复...在这样做的同时,我认为每次想要传递数据/读取数据时都需要轻敲设备。 - Michael Shrestha
1
是的,您总是需要将设备与标签/其他设备靠近。 Android 4.1使用蓝牙波束改进了这一点,其中两个NFC设备交换交接请求/选择NDEF消息,它们通过蓝牙进行配对,并在没有NFC的情况下进行传输。当然,这种行为对于没有BT的标签是不可能的。 - kamituel
是的,没错。但我说的是在开始传输之前需要点击屏幕的需求,在 NFC 标签的情况下是不需要的。 - Michael Shrestha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接