【问题标题】:Card Emulation, RC522 and Nexus 4's NFC UID卡仿真、RC522 和 Nexus 4 的 NFC UID
【发布时间】:2014-11-14 13:52:51
【问题描述】:

我有两个问题:

首先,我要模拟卡和 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有问题吗? 我用过艾滋病:

  • F04E66E75C02D8
  • F0394148148100
  • D2760000850101
  • F222222222

其次,我想知道Android设备的NFC在与其他设备通信时的UID是什么。谷歌找不到任何东西:(

你能帮帮我吗?

【问题讨论】:

    标签: android nfc apdu hce


    【解决方案1】:

    您使用的 AID 看起来不错(不过一个就足够了)。如果您的 HCE 服务未触发,您可能不会在另一端发出 SELECT(通过 AID)命令。因此,如果不知道您在通信的读者端做了什么,几乎不可能诊断那里出了什么问题。

    请注意,您上面的代码与 NDEF 消息无关。如果您想通过 HCE 正确传输 NDEF 消息,则需要在您的 HCE 服务中实现 NFC 论坛的 Type 4 Tag Operation 规范。此外,您应该避免在 processCommandApdu() 方法中使用任意字符串进行响应。相反,您应该实现基于 ISO/IEC 7816-4 APDU 的协议。

    关于您的第二个问题,Nexus 4(与大多数其他支持 HCE 的设备一样)通常会使用随机生成的防冲突标识符 (UID)。在大多数设备上,每次激活读取器设备的磁场(或每当手机进入读取器设备的范围时)都会生成此随机 ID。某些设备还会在屏幕打开时生成一个新 ID。

    【讨论】:

    • 1.那么,问题出在读者方面吗?阅读器不会向 Android 设备调用 SELECT 命令?但是,它可以读取其他 NFC 标签。如果我想传输 NDEF 消息,我必须在 HostAPDUService 中实现吗? 2.我有一个SS Note,它生成了一个固定的ID。我能拿到吗?
    • @TrươngVănTrọng 是的,读卡器需要使用卡说 ISO-DEP,并且需要为您注册 HCE 服务的 AID 发出 SELECT 命令。能够读取其他 NFC 标签并不一定使读取器有资格与 HCE 应用程序通信。
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多