我正在尝试将一个九位数字发送到NFC阅读器,但我的服务似乎没有启动。任何帮助将不胜感激。我正在测试的手机是三星Galaxy S3,而我正在使用Eclipse。
这是我的NFC阅读器发送的APDU命令。
F0A40400100F01020304
这是我得到的回复,这意味着(我认为)找不到文件。
6A 82
以下是如何构建APDU命令。
private byte CLS = (byte)0x00;
private byte SELECT_INS = (byte)0xA4;
private byte P1 = (byte)0x04;
private byte P2 = (byte)0x00;
private byte[] aid = {0x0F, 0x01, 0x02, 0x03, 0x04};
private Long TIMEOUT = 1000L;
private byte OK = (byte)0x90;
这是我的AID。
F0010203040506
问题是它甚至没有到达我的HCE服务,因此我的processCommandApdu永远不会被调用。我的日志猫显示了这一点。
11-12 15:56:50.175: D/NativeNfcManager(1064): doReceiveData. reutrn..
11-12 15:56:50.175: D/HostEmulationManager(1064): notifyHostEmulationData
11-12 15:56:50.175: D/HostEmulationManager(1064): call findSelectAid - 1
11-12 15:56:50.175: D/NativeNfcManager(1064): mAppletSelectStatus=3
11-12 15:56:50.185: D/NativeNfcManager(1064): Waiting for an APDU...
11-12 15:56:50.195: D/NativeNfcManager(1064): doReceiveData. reutrn..
11-12 15:56:50.195: D/HostEmulationManager(1064): notifyHostEmulationData
11-12 15:56:50.195: D/HostEmulationManager(1064): call findSelectAid - 1
11-12 15:56:50.195: D/HostEmulationManager(1064): Dropping non-select APDU in STATE_W4_SELECT
11-12 15:56:50.195: D/NativeNfcManager(1064): mAppletSelectStatus=3
11-12 15:56:50.205: D/NativeNfcManager(1064): Waiting for an APDU...
11-12 15:56:50.205: D/dalvikvm(10513): GC_CONCURRENT freed 994K, 53% free 8422K/17772K, paused 2ms+6ms, total 48ms
11-12 15:56:50.205: D/dalvikvm(10513): WAIT_FOR_CONCURRENT_GC blocked 39ms
11-12 15:56:50.215: W/SAMMLibraryCore(10513): Not AMS File(Invalid AMS End Marker)
11-12 15:56:50.215: W/SAMMLibrary(10513): Error on load SAMM File Info
11-12 15:56:50.225: D/NativeNfcManager(1064): doReceiveData. reutrn..
11-12 15:56:50.225: D/HostEmulationManager(1064): notifyHostEmulationData
11-12 15:56:50.225: D/HostEmulationManager(1064): call findSelectAid - 1
11-12 15:56:50.225: D/NativeNfcManager(1064): mAppletSelectStatus=3
11-12 15:56:50.225: W/SAMMLibraryCore(10513): Not AMS File(Invalid AMS End Marker)
11-12 15:56:50.225: W/SAMMLibrary(10513): Error on load SAMM File Info
11-12 15:56:50.225: D/NativeNfcManager(1064): Waiting for an APDU...
这是我在AndroidManifest中声明的服务。
<service
android:name=".MyHostApduService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE" >
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice" />
</service>
最后,我的服务是res / xml(我创建的文件夹)。
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false" >
<aid-group
android:category="other"
android:description="@string/aiddescription" >
<aid-filter android:name="F0010203040506" />
</aid-group>
</host-apdu-service>
答案 0 :(得分:2)
在您的host-apdu服务中,您注册了AID
F0010203040506
为了与您的HCE服务进行通信,读者必须为该AID发出SELECT(通过AID / DF名称)命令。有效的SELECT命令可能如下所示:
00 A4 0400 07 F0010203040506
您(可能?)使用代码构建的命令
private byte CLS = (byte)0x00;
private byte SELECT_INS = (byte)0xA4;
private byte P1 = (byte)0x04;
private byte P2 = (byte)0x00;
private byte[] aid = {0x0F, 0x01, 0x02, 0x03, 0x04};
与您注册的AID不匹配。相反,这是数据可用于为AID 0F01020304构建一个SELECT命令(这不是一个正确形成的AID顺便说一句。)
更糟糕的是,您在上面显示的APDU命令
F0A40400100F01020304
既不是SELECT命令也不是有效的APDU命令。
对于选择Andorid HCE应用程序,CLA字节必须为0x00(但在您的情况下为0xF0)。 Lc字段为0x10(16字节),但数据字段仅包含5个字节。