android - 如何在 Android 中创建标签对象
问题描述
我正在尝试将标记对象用于我的 Flutter 插件。使用 MethodChannel 我可以调用 Java 函数,但我的标记对象仍然为空。我将如何正确创建此 Intent?
else if (call.method.equals("readTag")) {
Intent intent = new Intent("android.intent.action.MAIN");
Tag nfcTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
我的猜测是 Intent 不能以这种方式创建,这就是为什么它为标签返回一个空对象。
解决方案
由于您已经创建了一个new
并且为空的Intent
,因此没有什么可以读取的。所以正如预期的那样。
AnIntent
实际上只是一个通用存储类,通常用于在一个 Activity 和另一个 Activity 之间以标准格式传递数据。
它们用于keys
在活动之间传递特定数据。keys
系统 NFC 活动用于将 NFC 相关数据传递给您的活动的其中一项是NfcAdapter.EXTRA_TAG
密钥。
Intent 与实际读取 NFC Tag 无关,它们只是用作一种通信方法,要求 System NFC Activity 执行操作以及它如何返回数据。
所以你可以在任何你想要的地方创建它们,包含许多不同的内容,并将它们传递给任何 Activity 以提供数据或接收它们以发送数据。
您似乎无法理解 NFC 在 Android 中的工作原理。
基本概念是。
旧 API
您创建一个Intent
基本上带有“消息”的系统 NFC 应用程序说“我想在进入范围时发送有关特定类型的 NFC 数据的数据”,您Intent
使用该消息将该消息发送到系统 NFC 活动enableForegroundDispatch
,当系统 NFC 应用程序看到正确类型的标签进入范围时,它会创建一个Intent
来存储有关 NFC 标签的数据以发送回请求它的活动。
这是使用通用方法进行进程间通信。
较新的 API
当enableReaderMode
您使用 NFC 特定方法再次发送有关您感兴趣的标签的数据时执行类似操作,并在看到请求类型的标签进入范围时以更具体的格式发回。
较新 API 的示例https://stackoverflow.com/a/64921434/2373819
清单过滤器
清单过滤器独立于旧 API 和新 API,它们用于存储系统 NFC 应用程序可以用来决定它是否应该在看到特定类型的 NFC 卡时启动您的应用程序的信息。它们可以与旧 API 和新 API 一起使用,但它们Ìntent
使用与旧 API 相同的字段将消息传递给您的应用程序,可以onCreate
使用getIntent
.
因此,创建一个new
空Intent
并期望神奇地获得一些 NFC 数据是错误的。
推荐阅读
- python - 模块“favicon”没有属性“get”我无法运行 favicon 示例。我的目标是在 python 中捕获网站徽标
- linux - 如何调优网络吞吐量突然下降
- angularjs - 我正在尝试显示 Base64 视频,(AngularJS,NeDB)
- spring - 如何以正确的方式保护 REST API Spring security auth2
- gravitee - 为什么门户 UI 中缺少身份提供者按钮
- sql-server - 如何在 ADF 中的存储过程活动的动态内容中给出条件
- javascript - 更改谷歌图表列位置的问题
- matlab - MATLAB:datenum() 每次使用“formatIn”参数调用时都会返回错误
- reactjs - Redux useSelector 更新不够快
- javascript - 如何在 Ionic React 多按钮表单中执行 HTML5 验证?