Android NFC Card Emulation попробуйте эмулировать карту

Я пытаюсь использовать NFC для эмуляции карты.

Что я ожидаю, так это то, что когда я передаю телефон на считыватель NFC, считыватель считывает данные (эти данные я бы потом изменил).

Передача телефона на ридер, для чего я понимаю, точка входа должна быть в классе Java CardService.java, Но метод processCommandApdu никогда не вызывается (я пытался вставить туда точку останова и даже тост, но этот код никогда не вызывался).

Итак, на данный момент главное, что я не могу понять, это: я сделал что-то не так? Эту вещь можно сделать?

1 ответ

Решение

Для того, чтобы метод processCommandApdu() Чтобы вызывать входящие команды APDU, читатель должен сначала выбрать ваше приложение. Выбор осуществляется с помощью команды SELECT (по имени AID / DF) в соответствии с ISO / IEC 8716-4:

00 A4 04 00   00

куда <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
Другие вопросы по тегам