2014-11-13 1 views
0

Я пытаюсь отправить девятизначное число в NFC Reader, но моя служба, похоже, не запускается. Любая помощь будет принята с благодарностью. Телефон, с которым я тестирую, - это Samsung Galaxy S3, и я использую Eclipse.Почему мое приложение HCE не попадает на мой HCE-сервис?

Вот команда APDU, которую посылает мой NFC-ридер.

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; 

Это моя помощь.

F0010203040506 

Вопрос заключается в том, что это даже не доходя до моего HCEservice, так что мой 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> 

ответ

1

В хост-APDU-сервис, зарегистрированный для AID

F0010203040506 

Для того, чтобы общаться с вашим услугам HCE, читатель должен выдать SELECT (на ИТО/имя DF) для этого AID. Действительная 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 (что не является корректным AID кстати.)

Еще хуже, команда APDU, что вы показываете выше

F0A40400100F01020304 

не является ни SELECT или действительной командой APDU.

Для выбора приложения Andorid HCE байт CLA должен быть 0x00 (но в вашем случае равен 0xF0). Поле Lc равно 0x10 (16 байтов), но поле данных содержит только 5 байтов.

+0

Благодарим за помощь! Проблема заключалась в сочетании AID и команды. – TeeBee

Смежные вопросы