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