5

我有一个设计个性化标签的应用程序,当它被安卓手机检测到时,会启动另一个包含一些内容的应用程序。一切正常,我知道如何制作只读 nfc 标签。问题是,我想让 NFC 标签只能由其他应用程序的用户读取。但我也希望,如有必要,修改这些标签以便重写。但我想阻止用户自己做。这就是为什么 ndef.makeReadOnly() 不适合我..

有人可以帮助我吗???

4

2 回答 2

7

这在一定程度上取决于您将使用的确切标签。Android 支持的用于存储 NDEF 消息的标准 NFC 论坛标签类型没有为此定义特定功能。所以 Android API 也不提供它。只有makeReadOnly(),这在大多数情况下使标签不可逆地只读。

但是,当您查看标签内部实际实现所需 NFC 功能的芯片时,它们通常会提供更多功能。这些额外功能可能包括写入访问控制,允许按照您的意愿配置芯片。

一些示例(全部由 NXP 制造,因为我最熟悉这些示例):

  1. MIFARE Classic:内存扇区受 2 个密钥保护。一个键可配置为只读,而另一个可用于写入内存。注意:并非所有 Android 设备都可以访问这些!
  2. MIFARE Ultralight C:可以提供额外的密码保护以防止覆盖
  3. MIFARE DESFire:可配置多个认证密钥和访问权限,包括无密钥只读访问
  4. ICODE SLI(X)-S:可以提供额外的密码保护以防止覆盖

这些标签中的大多数通常都可以在线销售。不过,您将不得不在 Internet 上搜索一下以收集有关如何进行配置的所有信息。大多数情况下都有可用的 PC 软件。

于 2013-03-29T12:38:05.040 回答
2

使 NFC 标签“只读”的唯一 100% 方法是调用 makeReadOnly(),但这是不可逆的。

您可以使用“开箱即用”的解决方案,例如:

  1. 不要在 NFC 标签上写入数据,而是将其保存在本地(如果数据仅限于一台设备)或服务器/云(如果数据是全局的)

  2. 将您的 NFC 标签 ID (getByteArrayExtra(NfcAdapter.EXTRA_ID)) 与您保存的数据相关联

  3. 当读取 NFC 标签时,获取其 ID 并通过适当的来源(本地或云数据库)找到适当的数据

.. 如果第二个应用程序是“第三方应用程序”并且不能与上层灵魂一起工作,您可以注册自己的 NFC 阅读应用程序(使用正确的 mimeType 过滤器的意图),然后使用 sendIntent 将您的数据(第 3 点)传递给主应用程序(或类似的支持方法)。

希望能帮助到你!

于 2013-03-27T21:53:34.803 回答