2016-05-12 4 views
2

У меня есть два приложения на двух устройствах Android, подобных CardEmulation и CardReader, из образцов для NFC.Эмуляция карты NFC с закрытым приложением-читателем

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

Но если я закрою приложение для чтения, я больше не могу отправлять ему данные. Вместо этого, когда оба телефона удерживаются вместе, они активируют передачу луча. Тем не менее, я хотел бы, чтобы телефон для чтения автоматически запускал приложение для чтения, когда два телефона удерживаются вместе.

Так вопрос:

  1. Могу ли я отправить данные из приложения HCE так, что читатель получает TECH_DISCOVERED намерение, когда устройство подвергнутся близко к Афоризм? (Мы не хотим, чтобы дополнительный прием нажал для режима Beam.)

  2. Если это невозможно, можете ли отправить HostApduService данные, чтобы читатель получил намерение NDEF_DISCOVERED?

+0

Обе стороны (карта и считыватель) являются устройствами Android, не так ли? –

+0

@MichaelRoland да. –

ответ

4

К сожалению, это невозможно. Из-за того, что стек Android NFC реализует опрос для других устройств NFC (одноранговый режим и теги NFC), невозможно запустить приложение-читатель на одном устройстве Android через приложение эмуляции карты на базе хоста (HCE) на другое устройство Android.

Стек NFC Android, по умолчанию опроса как для тегов NFC, так и для одноранговых устройств NFC. В результате, когда два Android-устройства удерживаются вместе, они автоматически свяжутся через одноранговый режим NFC и не через режим чтения/записи или режим эмуляции карты.

Как следствие, устройство «считывающее устройство» не может обнаружить HostApduService, работающий на втором устройстве. Таким образом, устройство Android не может эмулировать тег NFC (который содержит сообщение NDEF), который запускает приложение (которое фильтрует для намерения NDEF_DISCOVERED или даже намерениеили TAG_DISCOVERED) на втором устройстве Android.

Единственный способ связи между одним устройством Android (в режиме чтения/записи) и приложением HCE (HostApduService) на втором устройстве Android - с помощью reader mode API). Это отключает одноранговый опрос и, следовательно, позволяет устройству устройства Android обнаруживать режим эмуляции карты другого устройства. Однако для того, чтобы использовать этот API, ваше приложение должно уже иметь работу переднего плана на устройстве чтения.

Обратите внимание, что отключение Android Beam (через приложение «Настройки») не отключает одноранговый режим. Так что это ничего не изменит.