Взаимодействие NFC между устройствами Android запускает Android Beam вместо HCE

Я разрабатываю симулятор платежного терминала, который действует как автономный POS-терминал. Он нормально работает с чиповыми бесконтактными картами (может связываться с ними по соответствующему протоколу), инициировать транзакцию, считывать с них данные и т.д.

Я также хотел обрабатывать транзакции через Google Pay (POS-терминалы распознают Google Pay как обычную бесконтактную карту — тот же протокол). Но когда у меня есть одно устройство Android с запущенным приложением для POS-терминала и другое устройство Android с Google Pay, когда я касаюсь обоих устройств вместе, мое приложение POS сворачивается и отображается «Нажмите, чтобы отправить луч». Я ожидал, что вместо этого в приложении POS-терминала будет вызываться метод onNewIntent.

Как справиться с этим? Ожидаемое поведение заключается в том, что мое приложение (POS-терминал) не свернуто, а на другом телефоне срабатывает приложение Google Pay.

Должен ли я отправить что-то в начале, чтобы Android с Google Pay мог распознать, что это платежная транзакция? Или, может быть, какой-то конкретный фильтр намерений для обработки этого на Android-устройстве POS-терминала?

Я также заметил, что в одной из трех-четырех попыток я, похоже, получаю ожидаемое поведение - в моем приложении вызывается onNewIntent. Это похоже на некоторую гонку между моим приложением и поведением Android Beam по умолчанию.


person krzykol    schedule 19.12.2018    source источник


Ответы (1)


Вы не можете использовать обычные механизмы отправки тегов (фильтр намерений или система диспетчеризации переднего плана) для взаимодействия с другим устройством Android, которое работает в режиме эмуляции карты (HCE). Проблема в том, что два Android-устройства обычно автоматически обнаруживают свои возможности в одноранговом режиме. Следовательно, они подключаются в режиме P2P и запускают Android Beam (SNEP поверх LLCP поверх P2P). Обратите внимание, что даже если вы отключите Android Beam на обоих устройствах, они все равно будут выбирать режим P2P.

Чтобы преодолеть это, вам нужно будет использовать API режима чтения. Это позволяет отключать режим P2P и выборочно включать функции режима чтения/записи (например, различные технологии), пока ваша деятельность находится на переднем плане.

person Michael Roland    schedule 19.12.2018