Чтение нескольких тегов NFC одновременно в Android - PullRequest
18 голосов
/ 13 марта 2011

Новый 2.3.3 SDK включает улучшенную поддержку NFC, и я хотел бы написать приложение, которое опирается на это.В конечном счете, я хотел бы иметь возможность считывать данные из нескольких тегов, которые входят в поле одновременно, но Android, кажется, срабатывает только на первый, который входит в поле - последующие игнорируются.

При чтенииСпецификация NFC (ISO / IEC 14443-3) для тегов, которые я использую (Mifare Classic), я должен быть в состоянии послать команду 'halt' тегу, который заставит его перестать отвечать, и позволит мне читатьследующий тег в поле.Android не поддерживает команду остановки напрямую ни в одном из подклассов TagTechnology, поэтому я попытался отправить ее непосредственно, используя transceive(new byte[] {0x50, 0x00}).Это выдает IOException с сообщением «сбой передачи».

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

Можно ли одновременно общаться с несколькими тегами в поле?Что я делаю не так?

Ответы [ 3 ]

8 голосов
/ 11 апреля 2011

То, что вы хотите, к сожалению, на данный момент невозможно, если вы не совершите довольно продвинутую хакерскую попытку, которая почти никогда не является хорошей идеей:)

Возможно, вы могли бы остановить карту, если отправите правильные байты в transceive(), как вы пытаетесь сделать сейчас. Но поскольку остановка (или, скорее, HLTA, которую вы пытаетесь отправить) является командой ISO14443-3A, она не будет работать через интерфейс MifareClassic, который использует «зашифрованный» канал. К сожалению, прямая передача через интерфейс NfcA также не работает с текущим стеком.

Даже если вы можете заставить карту остановиться, это не приведет к тому, что микросхема NFC в телефоне возобновит опрос на наличие новых тегов - поскольку вы «обходите» стек.

1 голос
/ 16 марта 2011

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

0 голосов
/ 14 марта 2011

Успешно ли вы отправили другие команды, используя transceive, такие как блок чтения (0x30, 0x (блок)) или команды проверки подлинности сектора? Просто думая, что вы, возможно, захотите убедиться, что вы правильно используете transceive.

...