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。
所以祝你好运!
使用 Android HCE 模拟被检测为 NDEF 标记的标记并不像发送 NDEF 消息以响应 SELECT APDU 那样简单。您需要实施 NFC Forum Type 4 Tag Operation 规范。您可以从NFC 论坛网站获得该规范。
基本上,您需要为 AID 注册一个 HCE 服务,该服务D2760000850101实现了读取器端用来访问类型 4 标签的几个 APDU 命令:
SELECT NDEF 标签应用
00 A4 04 00 07 D2760000850101 [00]
Run Code Online (Sandbox Code Playgroud)SELECT 能力容器
00 A4 00 0C 02 E103
Run Code Online (Sandbox Code Playgroud)选择 NDEF 数据文件
00 A4 00 0C 02 xxyy
Run Code Online (Sandbox Code Playgroud)
xxyy功能容器中指定的 NDEF 数据文件的文件 ID在哪里。
READ BINARY(用于从功能容器或 NDEF 数据文件中读取数据,以当前选择的为准)
00 B0 xx yy zz
Run Code Online (Sandbox Code Playgroud)
哪里xx yy是要读取的偏移量,zz是要读取的字节数。
重要说明:请注意,Android 设备模拟的此类 NFC Forum Type 4 标签不能用于自动触发第二个 Android 设备上的应用程序(至少不可靠?)。将两个 Android 设备放在一起通常会导致它们建立点对点链接(即使 Beam 已关闭!)。只有第二个 Android 设备上的前台应用程序才能使用 NFC Reader 模式 API 绕过 Android Beam 并可靠地检测模拟标签。
| 归档时间: |
|
| 查看次数: |
5620 次 |
| 最近记录: |