如何将 Android 应用程序用作 MIFARE 卡?

How can I act with Android app as MIFARE card?

如何从 phone 向 MIFARE 卡 reader 发送 NDEF 消息?

在 reader 方面,我使用来自 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。

如何编辑此解决方案以使其工作?我只想使用 nfc-explorer 板从 Android 应用程序读取一条简单的 NDEF 消息,但我完全不知道如何执行此操作。

mifare.read_ndef() 似乎期望包含 NDEF 消息的 MIFARE Ultralight(或其他类型 2 标签)。您根本无法使用 Android 模拟 MIFARE (Ultralight) 标签(参见 Emulate Mifare card with Android 4.4)。

当您使用 public NdefMessage CreateNdefMessage(NfcEvent e) {}(或者实际上是 SetNdefPushMessage*())时,您在 Android 上所做的是定义一个 NDEF 消息,该消息应该在点对点中传输模式(使用 SNEP + LLCP + NFC-DEP)。这是一个与您读取(或模拟)标签时完全不同的协议栈。因此,当您想在 Android 上使用点对点模式时,您也需要在另一端使用支持点对点模式(和 SNEP)的库。