我已经创建了一个具有F0123412349999 I的HCE服务。根据Android文档,我需要发送一个选择的APDU,这样HCE服务将知道将以下消息重定向到哪个服务。这是我在成功连接后发送到电话的APDU:
{ 0x00, //CLA
0xA4, //INS
0x00, //P1
0x07, //P2
0x07, //Lc Length Content
0xF0, //Data (AID)
0x12,
0x34,
0x12,
0x34,
0x99,
0x99,
0x00 //Length of data expected
};
传输是成功的,但无论我做什么,android手机都会返回0x6f00。这被翻译成“没有精确诊断”。我不知道哪里出了问题,显然错误信息有点模糊。以下代码是我的HCE服务:
public class MyHostApduService extends HostApduService {
@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
Log.i("HCE service", "processCommandApdu");
byte[] answer = new byte[2];
answer[0] = (byte) 0x90;
answer[1] = (byte) 0x00;
return answer;
}
@Override
public void onDeactivated(int reason) {
Log.i("HCE service", "Deactivated: " + reason);
}
@Override
public void onCreate() {
Log.i("HCE service", "Created");
}
}
以及AID登记:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_name"
android:requireDeviceUnlock="false" >
<aid-group
android:category="other"
android:description="@string/app_name" >
<aid-filter android:name="F0123412349999" />
<aid-filter android:name="F0394148148100" />
</aid-group>
</host-apdu-service>
及舱单登记:
<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>
我用来阅读安卓手机的阅读器是ACR122阅读器。这款手机是宏达电手机。有一件事让我感到奇怪,那就是手机与读者联系时发送的ATR,它是0x3B80800101。我认为这会更大,包含更多的信息,但我可能错了。
我可以更改/修复什么使android将我的消息发送到我的HCE服务?
发布于 2014-09-27 18:28:49
您要发送到电话的SELECT APDU中的参数P1和P2的值可能无效。尝试以下几点:
P1 = 0x04
P2 = 0x00
您可以在一个名为“卡片规范”的文档中检查SELECT命令的所有参数,该文档由行业联盟Global发布。
https://stackoverflow.com/questions/26068027
复制相似问题