带有 HCE Android 的 NDEF 消息

use*_*818 4 android nfc ndef hce

我想用 Android 的 HCE 功能模拟主机卡。为此,我扩展了服务类 HostApduService 并覆盖了以下方法:

 public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
    if (Arrays.equals(SELECT_APDU, commandApdu)) {
        NdefMessage message = new NdefMessage(new NdefRecord  [] {NdefRecord.createTextRecord("en", "test"});
       return message.toByteArray();
    } else {
        return UNKNOWN_CMD_SW;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用第二个设备可以从 HCE 服务接收数据。问题是我总是收到“A 型”标签,但我需要一个 NDEF 消息。

有谁能够帮助我?

小智 9

对于任何坚持这个问题的人,我已经阅读了@Michael Roland 提出的 NFCForum -TS-Type-4-Tag。整个想法是正确的。您所需要的只是模拟进程 SEND 和 RECEIVED 命令以将字节数组转换为NDEF消息。我创建了两个存储库,一个是关于将字符串转换为NDEF 消息的整个包,另一个是用于验证 Android HCE 是否正确的iOS Reader NDEF TAG

所以祝你好运!


Mic*_*and 6

使用 Android HCE 模拟被检测为 NDEF 标记的标记并不像发送 NDEF 消息以响应 SELECT APDU 那样简单。您需要实施 NFC Forum Type 4 Tag Operation 规范。您可以从NFC 论坛网站获得该规范。

基本上,您需要为 AID 注册一个 HCE 服务,该服务D2760000850101实现了读取器端用来访问类型 4 标签的几个 APDU 命令:

重要说明:请注意,Android 设备模拟的此类 NFC Forum Type 4 标签不能用于自动触发第二个 Android 设备上的应用程序(至少不可靠?)。将两个 Android 设备放在一起通常会导致它们建立点对点链接(即使 Beam 已关闭!)。只有第二个 Android 设备上的前台应用程序才能使用 NFC Reader 模式 API 绕过 Android Beam 并可靠地检测模拟标签。