Android ACR122U NFC集成

时间:2018-05-11 14:51:04

标签: android nfc apdu hce acr122

有关调试和最终结果的信息,请参阅NFC reader "SELECT (by AID)" APDU is not routed to Android device。 TL; DR读者可能只是已经不存在了。

我的ACR122U读卡器已连接到我的Android设备。我的最终目标是在HCE模式下使用另一个Android设备来启用设备之间的数据通信。

目前我遇到与ACR122U阅读器集成的问题。我使用供应商的lib acssmc-1.1.1.jar提供程序。这是我目前的代码(省略打开阅读器的示例代码)。

mReader.power(slotNum, Reader.CARD_WARM_RESET);
mReader.setProtocol(slotNum, Reader.PROTOCOL_T0 | Reader.PROTOCOL_T1);

//FF 00 00 00 04 D4 4A 01 00 00 - Polling for the ISO14443-4 A ??
byte[] w = new byte[255];
int len = mReader.transmit(0, new byte[] { (byte)0xFF, 0x00, 0x00, 0x00, 0x04,(byte)0xD4, 0x4A, 0x01, 0x00}, 9, w, w.length);
Log.e("Response", "r: " + NfcUtils.convertBinToASCII(w, 0, len));

//00 A4 04 00 07 F0 01 02 03 04 05 07 00 - Select AID APDU
w = new byte[255];
mReader.transmit(0, new byte[] {0x00, (byte) 0xA4, 0x04, 0x00, 7,
    (byte)0xF0, 0x01, 0x02, 0x03, 0x04, (byte) 0x05, 0x07, 0}, 13, w, w.length);
Log.e("Response", "r: " + Arrays.toString (recvBuffer));

如果我点击标签到NFC阅读器,这是我得到的输出

r: D54B0101440004048853606A9000
r: lots of zeroes

当我点按Android设备时,这是响应:

r: D54B6300
r: lots of zeroes

基本上它在轮询阶段失败了(?)。在Android设备上,我有一个基本的HostAdpuService实现:

public class MyHostApduService extends HostApduService {

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("APDU", "APDU service was created.");
    }

    @Override
    public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
       Log.e("APDU", "command apdu: " + Arrays.toString(apdu));
       return new byte[2];
    }
    @Override
    public void onDeactivated(int reason) {
       Log.e("APDU", "ON DEACTIVATED.");
    }
}

processCommandApdu从未被召唤过。查看Android设备的日志,我点击设备时无法找到任何相关信息。

我在网上浏览了几个例子,并且无法在其他(非Android)平台(Windows,OSX)上运行。

0 个答案:

没有答案