我有两个问题:
首先,我想要模拟卡和NDEF消息。 我使用以下代码实现了
HostApduService
:
public class MyHostApduService extends HostApduService {
private int messageCount = 0;
@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
String n1="Hello World";
byte[] response=n1.getBytes();
Log.d("HCEDEMO", "Application selected");
return response;
}
@Override
public void onDeactivated(int reason) {
Log.d("HCEDEMO", "Deactivated: " + reason);
}
}
当我的手机模拟标签时,将其放在 NFC 读取器 RC522 附近。 但这些代码没有运行。 AID有问题吗? 我使用了艾滋病:
其次,我想知道Android设备的NFC与其他设备通信时的UID是什么。谷歌没有找到任何东西:(
你能帮我吗?
您使用的辅助工具看起来不错(不过一个就足够了)。如果您的 HCE 服务未触发,您可能不会在另一端发出 SELECT(通过 AID)命令。因此,如果不知道您在通信的阅读器端做了什么,几乎不可能诊断那里出了什么问题。
请注意,您的上述代码与 NDEF 消息无关。如果您希望通过 HCE 正确传输 NDEF 消息,则需要在 HCE 服务中实施 NFC 论坛的类型 4 标签操作规范。此外,您应该避免在
processCommandApdu()
方法中使用任意字符串进行响应。相反,您应该实现基于 ISO/IEC 7816-4 APDU 的协议。
关于第二个问题,Nexus 4(与大多数其他支持 HCE 的设备一样)通常会使用随机生成的防冲突标识符 (UID)。在大多数设备上,每次激活读取器设备的磁场(或每当手机进入读取器设备的范围时)都会生成此随机 ID。有些设备还会在屏幕打开时生成新的 ID。
对于您的情况,在模块 nfc 中配置的相同 apdu id 必须与服务 MyHostApduService 中的相同。