首页 > 解决方案 > NFC 读取 Android Java - 来自 getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES) 的空对象

问题描述

我正在尝试实现一个简单的 Android 应用程序来读取 NFC 标签。我按照官方文档(https://developer.android.com/guide/topics/connectivity/nfc)实际实现了一个几乎等同于“codeexpedia”-> Source code创建的应用程序。

当标签靠近智能手机时,会调用 onNewIntent 方法,但是,当我尝试通过该方法获取数据时getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES),我总是获得 null。

您可以在以下直接链接链接中找到导致问题的代码

有没有人知道为什么会这样?

标签: javaandroidnfc

解决方案


NdefFormatable技术意味着卡在格式化后能够存储 Ndef 消息。

所以基本上这张卡上没有Ndef消息,一旦它被格式化并放上Ndef消息,那么代码就可以读取这张卡。

您可以使用 NFC 工具或 NXP TagWriter App 等应用程序来格式化和添加 Ndef 消息

格式化后,它应该显示NfcV, Ndef技术。

代码中的错误https://github.com/codeexpedia/android_nfc_read_write/blob/master/app/src/main/java/com/example/peng/nfcreadwrite/MainActivity.java

80 号线 -IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);

应该 IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);

因为它假定所有卡都有一个 Ndef 消息可供读取,所以对于未格式化的卡、银行卡、很多运输卡等情况并非如此

还有第 91 到 93 行 -if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {

应该 if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {


推荐阅读