Android использует механизм маршрутизации на основе AID для отправки сообщений в режиме эмуляции карты в конкретное приложение (приложения HCE или SE-апплеты). Это также то, что NFC Forum разработал в качестве основного средства поддержки нескольких независимых эмуляторов карт на одном устройстве NFC.
маршрутизация на основе АИДА требует первой команды, чтобы быть командой SELECT (с помощью DF имени/AID):
00 A4 0400 <Lc> <AID> [<Le>]
Это необходимо для того, чтобы различать между различными приложениями. В противном случае Android не сможет отправить сообщение в нужную службу HCE.
Однако это также предотвращает эмуляцию всего, что предшествует успешному выбору приложения (например, выбор основного файла с помощью команды SELECT (по имени файла и т. Д.)). Если это было разрешено, Android не будет знать, какое приложение HCE отвечает за обработку этой команды. Следовательно, было бы невозможно разместить несколько приложений HCE, для которых всем требуется мастер-файл на одном устройстве. Поэтому я не ожидаю, что это будет поддержано в ближайшее время.
На других платформах mutli-приложений, которые также имеют такую же проблему. Например, типичные смарт-карты Java Card также не имеют основного файла. На этих платформах проблема обычно преодолевается, позволяя одному выбранному по умолчанию приложению обрабатывать все сообщения до первой команды SELECT (по имени DF/AID). Можно только предположить, будет ли такой механизм появляться в будущей версии Android ... Я бы не рассчитывал на это.
Если вы используете корневые устройства, вы можете использовать инфраструктуру, такую как Xposed, для адаптации системной службы NFC для отправки сообщений на какую-либо службу HCE по умолчанию.
Спасибо за ваш ответ. Но логика обработки POS очень трудно изменить, первая команда POS-отправки - 00A40000023F00.So Android HCE не направляет эту команду в мое приложение HCE. –
Возможно, вы можете изменить свой идентификатор приложения на 3F00 (если это разрешено, конечно) –
Команда SELECT AID - 00A404XXXXXX Команда SELECT MF - 00A40000023F00 Поэтому изменить идентификатор приложения на 3F00 не работает. –