java - 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。
您可以在以下直接链接链接中找到导致问题的代码
有没有人知道为什么会这样?
解决方案
NdefFormatable
技术意味着卡在格式化后能够存储 Ndef 消息。
所以基本上这张卡上没有Ndef消息,一旦它被格式化并放上Ndef消息,那么代码就可以读取这张卡。
您可以使用 NFC 工具或 NXP TagWriter App 等应用程序来格式化和添加 Ndef 消息
格式化后,它应该显示NfcV, Ndef
技术。
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)) {
推荐阅读
- angular - Angular 服务工作者 URL
- laravel - 通过路由或用户触发器使网站向公众开放的策略
- python - MySQL Python:JSON 类型在赋值时抛出错误
- reactjs - 如何在 React 中提取 URL 段
- powershell - Github action windows runner:如何从 PATH 中删除所有 sh.exe
- python - Tkinter 使用 Pyinstaller 打开不需要的新窗口
- gridview - 将 3 列更改为网格
- java - 扑克游戏:找到玩家获胜的可能性
- jgit - Java 中的 Git 远程更新查找器
- python - Plotly Boxplot 在每次运行结束时附加而不是输出新图