我正在尝试做我猜想会很简单的事情,但事实证明并非如此。我有一个 ACR122 NFC 读卡器和一堆 Mifare Classic 和 Mifare Ultralight 标签,我要做的就是从 Java 应用程序读取和写入每张卡的 mime 类型和短文本字符串。这是我到目前为止所做的工作:
- 我可以连接到我的阅读器并收听标签
- 我可以检测阅读器上的标签类型
- 在 Mifare Classic 标签上,我可以遍历标签上的所有数据(在通过手机对标签进行编程之后)并构建一个 ascii 字符串,但大部分数据是“垃圾”数据
- 我可以确定标签上是否有应用程序目录。
这是我的代码:
主要的:
public static void main(String[] args){
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals;
try{
TerminalHandler handler = new TerminalHandler();
terminals = factory.terminals().list();
CardTerminal cardTerminal = terminals.get(0);
AcsTerminal terminal = new AcsTerminal();
terminal.setCardTerminal(cardTerminal);
handler.addTerminal(terminal);
NfcAdapter adapter = new NfcAdapter(handler.getAvailableTerminal(), TerminalMode.INITIATOR);
adapter.registerTagListener(new CustomNDEFListener());
adapter.startListening();
System.in.read();
adapter.stopListening();
}
catch(IOException e){
}
catch(CardException e){
System.out.println("CardException: " + e.getMessage());
}
}
自定义NDEFListener:
public class CustomNDEFListener extends AbstractCardTool
{
@Override
public void doWithReaderWriter(MfClassicReaderWriter readerWriter)
throws IOException{
NdefMessageDecoder decoder = NdefContext.getNdefMessageDecoder();
MadKeyConfig config = MfConstants.NDEF_KEY_CONFIG;
if(readerWriter.hasApplicationDirectory()){
System.out.println("Application Directory Found!");
ApplicationDirectory directory = readerWriter.getApplicationDirectory();
}
else{
System.out.println("No Application Directory Found, creating one.");
readerWriter.createApplicationDirectory(config);
}
}
}
从这里开始,我似乎对如何实际创建应用程序并与之交互感到茫然。一旦我可以创建应用程序并向其写入 Record 对象,我应该能够使用 TextMimeRecord 类型写入我需要的数据,我只是不知道如何到达那里。有什么想法吗?
::Addendum:: 显然没有 nfc-tools 标签,应该有。有足够代表的人会善意地创建一个并重新标记我的问题以包含它吗?
::Second Addendum:: 另外,如果有人能指出我需要的库的方向,我愿意放弃 NFC-Tools,它有据可查,并且可以在 Windows 环境中运行。