2011-03-13 2 views
18

새로운 2.3.3 SDK에는 개선 된 NFC 지원이 포함되어 있으며 이에 의존하는 앱을 작성하고 싶습니다. 궁극적으로 필드에 동시에 들어가는 여러 태그에서 데이터를 읽을 수 있기를 원하지만 안드로이드는 필드에 들어가는 첫 번째 태그에서 트리거하는 것으로 보이며 이후 태그는 무시됩니다.Android에서 동시에 여러 개의 NFC 태그 읽기

내가 사용하고있는 태그 (Mifare Classic)의 NFC 사양 (ISO/IEC 14443-3)을 읽은 후 태그에 '정지'명령을 보내면 멈출 수 있어야합니다. 응답하고 필드의 다음 태그를 읽도록 허용합니다. 안드로이드는 TagTechnology 하위 클래스 중 하나에서 직접 halt 명령을 지원하지 않으므로 transceive(new byte[] {0x50, 0x00})을 사용하여 직접 직접 보냈습니다. 이 메시지는 IOException과 함께 '송수신 실패'라는 메시지가 표시됩니다.

틀림없이 나는이 모든 것을 주 스레드에서하고 있는데, 나는 그것이 나쁜 생각이라는 것을 이해하지만 가능한 한 쉽게 개념을 시험하고 싶다.

필드의 여러 태그와 동시에 통신 할 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

8

는 순간에 불행하게도 수 없습니다 당신은 거의 좋은 생각 : 당신이의 오른쪽 바이트를 보내는 경우

은 아마 당신이 카드를 정지 할 수 결코 꽤 고급 해커를 수행하지 않는 transceive()을 클릭하십시오. 그러나 중단 (또는 오히려, 보내려는 HLTA) ISO14443-3A 명령이기 때문에 "암호화 된"파이프를 사용하는 MifareClassic 인터페이스를 통해 작동하지 않습니다. 불행하게도 NfcA 인터페이스를 통해 직접 전송하는 것은 현재 스택에서도 작동하지 않습니다.

카드를 정지시킬 수 있더라도 스택의 "돌아 다니기"때문에 자동으로 NFC 칩이 새 태그에 대한 폴링을 다시 시작하지 않습니다.

+0

최종 답변을 주셔서 감사합니다! –

0

읽기 블록 (0x30, 0x (블록)) 또는 섹터 명령 인증과 같은 송수신기를 사용하여 다른 명령을 성공적으로 보내셨습니까? 당신이 처음에 정확하게 송수신기를 사용하고 있는지 확인하고 싶을지도 모른다고 생각합니다.

+0

좋은 지적. 나는 transcieve로 직접 다른 것을 시도하지 않았다. 나는 그것을 줄 것이다. –

+0

'readBlock()'을 호출하면 (인증 후) 잘 동작합니다; 'readblock()'출력과 같은 바이트로'transceiverive()'를 호출하는 것과 마찬가지입니다. 카드를 정지 시키려고해도 여전히 'IOException'이 생성됩니다. –

1

짧은 경험에 따라 여러 태그를 사용할 수 없습니다. 두 개의 태그가 필드에있는 경우 태그에서 ID를받지 못하면 이진수가 0입니다. 내 생각에이 시점에서 하나의 태그에만 액세스 할 수 있으며 필드에 둘 이상의 태그 만있을 수 있습니다. 당신이 원하는 무엇

+0

RF 프로토콜은 충돌 해결을 지원하고 여러 태그를 해결합니다. - 질문은 내가 이미 읽고있는 태그를 중단하려고 할 때 오류가 발생하는 이유는 무엇입니까? –

+0

SDK가 동시에 충돌이나 여러 트랜스 폰더를 지원하지 않기 때문입니다. 오류에 대해 모르겠으나 트랜스 폰더가 필드에 들어갈 때 의도를 수신하면이 의도는 단일 태그에 대한 것입니다. SDK가 너무 제한되어 있으므로 현재 태그 프로토콜에 따라 다른 태그의 UID를 찾을 수 없습니다. 깨끗한 솔루션에는 둘 이상의 태그를 지원하는 업데이트 된 SDK가 포함됩니다. 물론 "해킹"을 상상하거나 NDK를 사용하여 현재의 한계를 극복 할 수 있습니다. – Nolife

+0

이것이 가장 가까운 답변 일 것 같으므로 추가 정보로 질문을 업데이트 할 수 있습니까? –