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

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

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

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

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

3 ответов


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

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

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


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


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