Android NFC Card Emulation попробуйте эмулировать карту
Я пытаюсь использовать NFC для эмуляции карты.
Что я ожидаю, так это то, что когда я передаю телефон на считыватель NFC, считыватель считывает данные (эти данные я бы потом изменил).
- Я использую этот пример проекта: этот пример проекта
- Я использую Nexus 5.
- Я использую ACS ACR128 ридер: этот ридер
Передача телефона на ридер, для чего я понимаю, точка входа должна быть в классе Java CardService.java
, Но метод processCommandApdu
никогда не вызывается (я пытался вставить туда точку останова и даже тост, но этот код никогда не вызывался).
Итак, на данный момент главное, что я не могу понять, это: я сделал что-то не так? Эту вещь можно сделать?
1 ответ
Для того, чтобы метод processCommandApdu()
Чтобы вызывать входящие команды APDU, читатель должен сначала выбрать ваше приложение. Выбор осуществляется с помощью команды SELECT (по имени AID / DF) в соответствии с ISO / IEC 8716-4:
00 A4 04 0000
куда <Lc>
длина <AID>
а также <AID>
идентификатор приложения, зарегистрированный для вашего приложения.
Структура приложения ИСО / МЭК 8716-4 (т. Е. Выбор приложения с помощью команды SELECT (посредством AID)) - это единственный способ, с помощью которого Android может начать взаимодействие с приложением через HCE. Следовательно, невозможно эмулировать карты (карточные приложения), которые используют разные механизмы. (По крайней мере, без изменения самой системы Android; например, через настроенное ПЗУ или через Xposed.)
AID для примера приложения CardEmulation регистрируются через файл с именем res/xml/aid_list.xml
в примере проекта. В этом файле вы регистрируете группы AID, которые в свою очередь содержат записи фильтра AID:
<aid-group android:description="@string/card_title" android:category="other">
<aid-filter android:name="F222222222"/>
</aid-group>
Поэтому AID по умолчанию, зарегистрированный в примере приложения, F222222222
, Следовательно, вы можете использовать следующую команду SELECT (byte AID) для выбора приложения:
00 A4 04 00 05 F2 22 22 22 22 00