null对象(nfcadapter.extra\u ndef\u消息)

zour9fqk  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(369)

我正在尝试实现一个简单的android应用程序来读取nfc标签。我看了官方文件(https://developer.android.com/guide/topics/connectivity/nfc)实际实现的应用程序几乎等于“codexpedia”->源代码创建的应用程序。
当标签靠近智能手机时,onnewintent方法是call,但是,当我尝试通过该方法获取数据时 getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES) ,我总是获得null。
您可以在以下直接链接中找到导致问题的代码
有人知道为什么会这样吗?

093gszye

093gszye1#

NdefFormatable 这项技术意味着,一旦格式化,该卡就能够存储ndef消息。
所以基本上这张卡上没有ndef消息,一旦它被格式化,一个ndef消息放在上面,代码就可以读取这张卡了。
你可以使用nfc工具或nxp tagwriter应用程序等应用程序格式化和添加ndef消息
一旦格式化,它应该显示 NfcV, Ndef 技术。
代码中的错误https://github.com/codexpedia/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)) {

相关问题