Подтвердить что ты не робот

Чтение нескольких тегов NFC одновременно на Android

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

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

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

Возможно ли одновременно связываться с несколькими тегами в поле? Что я делаю неправильно?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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