我想使用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;
}
}
使用第二个设备可以从HCE服务接收数据。问题是我总是收到“Type A”标签,但我需要一个NDEF消息。
有人能帮助我吗?
答案 0 :(得分:4)
对于那些坚持此问题的人,我已经阅读了@Michael Roland提出的NFCForum-TS-Type-4-Tag。整个想法是正确的。您所需要做的就是模拟SEND和RECEIVED过程,以将字节数组转换为NDEF消息。我创建了两个存储库,一个存储库总结了有关将字符串转换为NDEF message的整个程序包,另一个存储库是一个iOS Reader NDEF TAG来验证Android HCE是否正确。
祝你好运!
答案 1 :(得分:2)
使用Android HCE模拟检测为NDEF标记的标记并不像发送NDEF消息以响应SELECT APDU那么简单。您需要实施NFC论坛类型4标签操作规范。您可以从NFC Forum website获得该规范。
基本上,您需要为AID D2760000850101
注册一个HCE服务,该服务实现了一些读取器用来访问Type 4标签的APDU命令:
SELECT NDEF标签应用
00 A4 04 00 07 D2760000850101 [00]
SELECT功能容器
00 A4 00 0C 02 E103
SELECT NDEF数据文件
00 A4 00 0C 02 xxyy
其中xxyy
是能力容器中指定的NDEF数据文件的文件ID。
READ BINARY(用于从能力容器或NDEF数据文件中读取数据,无论当前选择哪个)
00 B0 xx yy zz
其中xx yy
是要读取的偏移量,zz
是要读取的字节数。
重要提示:请注意,Android设备模拟的此类NFC论坛类型4标签不能用于在第二台Android设备上自动触发应用程序(至少不可靠?)。将两个Android设备放在一起通常会导致它们建立点对点链接(即使Beam已关闭!)。只有第二台Android设备上的前台应用才能使用NFC阅读器模式API绕过Android Beam并可靠地检测模拟标签。