【问题标题】:How can I creating a Tag Object in Android如何在 Android 中创建标签对象
【发布时间】:2021-01-22 11:06:00
【问题描述】:

我正在尝试将标记对象用于我的 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 不能以这种方式创建,这就是为什么它为标签返回一个空对象。

【问题讨论】:

  • 您确定intent 包含NfcAdapter.EXTRA_TAG 键的值吗?
  • 是的,在一个单独的 android 应用程序中试用了 NfcAdapter.EXTRA_TAG 并且成功了

标签: android flutter android-intent nfc flutter-plugin


【解决方案1】:

当您创建了一个 new 并为空 Intent 时,没有什么可以读取的。果然不出所料。

Intent 实际上只是一个通用存储类,通常用于在一个 Activity 和另一个 Activity 之间以标准格式传递数据。

他们使用keys 在活动之间传递特定数据。系统 NFC Activity 用于将 NFC 相关数据传递给您的 Activity 的keys 之一是NfcAdapter.EXTRA_TAG 密钥。

Intent 与实际读取 NFC Tag 无关,它们只是用作一种通信方法,要求 System NFC Activity 执行操作以及它如何返回数据。

所以你可以在任何你想要的地方创建它们,包含许多不同的内容,并将它们传递给任何 Activity 以提供数据或接收它们以发送数据。

您似乎不太了解 NFC 在 Android 中的工作原理。
基本概念是。

旧 API
您创建了一个Intent,基本上向系统 NFC 应用程序发送一条“消息”,说“当有人进入范围时,我想发送有关特定类型的 NFC 数据的数据”,您将该 Intent 消息发送到系统NFC Activity 使用 enableForegroundDispatch,当系统 NFC 应用程序看到正确类型的标签进入范围时,它会创建一个 Intent 来存储有关 NFC 标签的数据,以发送回请求它的 Activity。
这是使用通用方法进行进程间通信。

较新的 API
当您enableReaderMode 使用 NFC 特定方法再次发送有关您感兴趣的标签的数据时,执行类似的操作,当它看到请求类型的标签进入范围时,它会以更具体的格式发回。
较新 API 的示例https://stackoverflow.com/a/64921434/2373819

清单过滤器 清单过滤器独立于旧 API 和新 API,它们用于存储系统 NFC 应用程序可以用来决定它是否应该在看到特定类型的 NFC 卡时启动您的应用程序的信息。它们可以与旧 API 和新 API 一起使用,但它们使用与旧 API 相同的字段将 Ìntent 消息传递给您的应用程序,可以使用 getIntentonCreate 读取和处理。

所以创建new 和空Intent 并期望神奇地获得一些NFC 数据是错误的。

【讨论】:

  • 那么在 Activity 类之外使用 Intent 不起作用?
  • 更新答案,是的,他们在活动课程之外“工作”,但可能不像您预期​​的那样。
  • 谢谢 Andrew,经过一番研究,我注意到没有太多关于新 API enableReaderMode 的文档。您是否知道可以分享一个链接以了解更多信息。
  • 更新的答案添加了指向新 API 示例的链接,新 API 具有完整的参考文档,只是它没有示例应提供的如何将其连接在一起的“操作方法”指南。我还添加了“清单过滤器”如何融入其中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 2013-01-16
  • 2022-12-30
  • 2019-07-26
相关资源
最近更新 更多