The HCE emulated card will understand exactly the commands that your HCE application APDU service processes. So, for example, if your processCommandApdu() service processCommandApdu() service callback method looks like this:
final static byte[] SW_NO_ERROR = new byte[]{ (byte)0x90, (byte)0x00 }; final static byte[] SW_INCORRECT_P1P2 = new byte[]{ (byte)0x6A, (byte)0x86 }; final static byte[] SW_INS_NOT_SUPPORTED = new byte[]{ (byte)0x6D, (byte)0x00 }; final static byte[] SW_ERR_UNKNOWN = new byte[]{ (byte)0x6F, (byte)0x00 }; @Override public byte[] processCommandApdu(byte[] apdu, Bundle extras) { if (apdu.length >= 4) { if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) {
Your HCE application will understand the following APDU command:
SELECT APPLICATION (by AID)
00 A4 04 xx ...
GET DATA for data object 0201
00 CA 02 01 00
GET DATA for data object 0202
00 CA 02 02 00
GET DATA for data object 0203
00 CA 02 03 00
Other commands will lead to various errors.
source share