我正在尝试使用NFC模拟卡片。
我的期望是,当我在NFC阅读器上通过手机时,阅读器会读取数据(这些数据将在未来修改)。
将电话传递到阅读器上,根据我的理解,入口点应该在Java类CardService.java
中。但是方法processCommandApdu
永远不会被调用(我试图在那里插入断点,甚至是吐司,但是从不调用该代码)。
所以目前我无法理解的主要问题是:我做错了什么吗?这件事可以做到吗?
答案 0 :(得分:3)
为了为传入的APDU命令调用方法processCommandApdu()
,读者需要首先选择您的应用程序。根据ISO / IEC 8716-4:
00 A4 04 00 <Lc> <AID> 00
其中<Lc>
是<AID>
的长度,<AID>
是为您的应用注册的应用标识符。
ISO / IEC 8716-4应用程序结构(即通过SELECT(通过AID)命令选择应用程序)是唯一的方式 Android允许通过HCE开始与应用程序的交互。因此,不可以模拟使用不同机制的卡(卡应用程序)。 (至少没有修改Android系统本身;例如,通过自定义ROM或通过Xposed。)
CardEmulation示例应用程序的AID通过示例项目中名为res/xml/aid_list.xml
的文件进行注册。在此文件中,您注册AID组,而AID组又包含AID过滤器条目:
<aid-group android:description="@string/card_title" android:category="other">
<aid-filter android:name="F222222222"/>
</aid-group>
因此,示例应用中注册的默认AID为F222222222
。因此,您可以使用以下SELECT(字节AID)命令来选择应用程序:
00 A4 04 00 05 F2 22 22 22 22 00