如何将 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)的库。
如何从 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)的库。