安卓:如何使NFC标签对用户只读而对我可写?

5
我有一个应用程序,设计个性化标签,当Android手机检测到它时,启动另一个带有一些内容的应用程序。一切正常运行,我知道如何制作只读NFC标签。问题是,我想让NFC标签只能被另一个应用程序的用户读取。但是,如果必要的话,我也希望可以修改这些标签以便重新写入。但是我希望防止用户自行操作。 这就是为什么ndef.makeReadOnly()不适合我的原因。
有人能帮帮我吗?
2个回答

7
这取决于您将使用的确切标签。用于存储Android支持的NDEF消息的标准NFC Forum标签类型没有为此定义具体功能。因此,Android API也不提供它。只有makeReadOnly(),在大多数情况下会使标签变为不可逆的只读状态。
然而,当您查看实际实现所需NFC功能的标签内部的芯片时,它们通常提供更多的功能。这些额外的功能可能包括访问控制来进行写入,允许配置芯片以满足您的需求。
以下是一些示例(所有示例都由NXP制造,因为我最熟悉这些):
1. MIFARE Classic:内存扇区受2个密钥保护。一个密钥可以配置为只读,而另一个密钥可以用于写入内存。注意:并非所有Android设备都可以访问这些标签!
2. MIFARE Ultralight C:可以提供额外的密码保护以防止覆盖
3. MIFARE DESFire:可以配置多个身份验证密钥和访问权限,包括无需密钥的只读访问
4. ICODE SLI(X)-S:可以提供额外的密码保护以防止覆盖
这些标签大多数都可以在线购买。但是,您需要在互联网上搜索一些信息,以了解如何进行配置。大多数情况下都有PC软件可用。

2
唯一使NFC标签“只读”的方法是调用makeReadOnly(),但这是不可逆的。
您可以使用“开箱即用”的解决方案,例如:
1. 不要在NFC标签上写入数据,而是将其保存在本地(如果数据仅限于一个设备)或服务器/云端(如果数据是全局的)。 2. 将NFC标签ID(getByteArrayExtra(NfcAdapter.EXTRA_ID))与已保存的数据链接起来。 3. 当读取NFC标签时,获取其ID并通过适当的来源(本地或云端数据库)查找相应的数据。
如果第二个应用程序是“第三方应用程序”并且无法使用上述解决方案,则可以注册自己的NFC读取应用程序(具有正确的mimeType过滤器的意图),然后使用sendIntent(或类似支持的方法)将数据(第3点)传递到主应用程序中。
希望这对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接