Как я могу использовать приложение Android как карту MIFARE? - PullRequest
0 голосов
/ 22 января 2019

Как отправить сообщение NDEF с телефона на устройство чтения карт MIFARE?

На стороне читателя я использую этот код из https://github.com/AlterCodex/nxppy:

import nxppy
import ndef

# Instantiate reader
mifare = nxppy.Mifare()

# Select tag
uid = mifare.select()

# Read NDEF data
ndef_data = mifare.read_ndef()

# Parse NDEF data
ndef_records = list(ndef.message_decoder(ndef_data))

Когда я пытаюсь отправить сообщение NDEF с этим кодом, я получаю ошибку памяти:

    public NdefMessage CreateNdefMessage(NfcEvent e)
    {
        NdefRecord uriRecord = NdefRecord.CreateUri("http://myURL");
        NdefMessage message = new NdefMessage(new[] { uriRecord });
        return message;
    }

Для этого кода я получаю сообщение об ошибке: ndef_data = milfare.read_ndef () MemoryError.

Как мне отредактировать это решение, чтобы оно работало? Я просто хочу прочитать простое сообщение NDEF из приложения Android с платой nfc-explorer, но я совершенно запутался, как это сделать.

1 Ответ

0 голосов
/ 22 января 2019

Кажется, что mifare.read_ndef() ожидает MIFARE Ultralight (или другой тег типа 2), содержащий сообщение NDEF. Вы просто не можете эмулировать тег MIFARE (Сверхлегкий) с Android (см. Эмуляция карты Mifare с Android 4.4 ).

То, что вы делаете в Android, когда вы используете public NdefMessage CreateNdefMessage(NfcEvent e) {} (или фактически SetNdefPushMessage*()), это то, что вы определяете сообщение NDEF, которое должно передаваться в одноранговом режиме (используя SNEP + LLCP + NFC-DEP ). Это совершенно другой стек протоколов, чем когда вы читаете (или эмулируете) тег. Следовательно, если вы хотите использовать одноранговый режим на Android, вам нужно будет использовать библиотеку, которая поддерживает одноранговый режим (и SNEP) на другом конце.

...