我有两个问题:
首先,我想要仿真卡和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 Reader RC522附近。 但是这些代码没有运行。 AID有问题吗? 我使用了AID:
其次,我想知道Android设备与其他设备通信时的UID是什么。谷歌找不到任何东西:(
你能帮帮我吗?
答案 0 :(得分:0)
你正在使用的AID看起来还不错(但是应该足够了)。如果未触发HCE服务,则可能不会在另一端发出SELECT(通过AID)命令。因此,如果不知道你在通信的读者方面做了什么,那么很难诊断出那里出了什么问题。
请注意,您的上述代码与NDEF消息无关。如果您想通过HCE正确传输NDEF消息,则需要在HCE服务中实施NFC论坛的Type 4标签操作规范。此外,您应该避免使用processCommandApdu()
方法中的任意字符串进行响应。相反,您应该实施基于ISO / IEC 7816-4 APDU的协议。
关于第二个问题,Nexus 4(与大多数其他支持HCE的设备一样)通常会使用随机生成的防冲突标识符(UID)。在大多数设备上,为读取器设备的每个磁场激活(或者每当电话进入读取器设备的范围时)生成该随机ID。每当屏幕打开时,某些设备也会生成新的ID。