有没有办法找出 Android 设备上的 NFC 堆栈(或芯片组)?我正在创建一个具有 NfcV 类(ISO15693 标签)的自定义实现的应用程序。在 Nexus S、Galaxy S2、Nexus 7 等旧设备上,NFC 芯片组来自 NXP,唯一支持的 ISO15693 标签是 NXP ICODE 标签。我有一个依赖于收发功能的自定义实现。它与 TI 和 ST Micro 标签完美搭配。但问题是,在 Nexus 10、Nexus 4 和 SGS4 等设备上,Google 开始使用 Broadcom NFC 收发器及其原生支持 ISO15693 标签的 NFC 堆栈。是否可以通过编程方式识别 NFC 芯片组?如果有怎么办?
3 回答
基于 NXP NFC 的设备都支持MifareClassic
标签,而基于 Broadcom 的设备则不支持。您可以检查您的应用程序是否存在该支持,如https://stackoverflow.com/a/15833191/1202968中所述。
当您编写“唯一受支持的 ISO15693 标签是 NXP ICODE 标签”时,我认为您的意思是仅在此类设备的 NXP ICODE 标签上支持在 ISO15693 标签上读取和写入 NDEF 消息(因为使用 ISO 15693 命令可以正常通信在这些基于 NXP 的 NFC 设备上)。如果/何时(如果有的话)这些设备得到更新以支持其他 ISO15693 标签上的 NDEF 消息存储,那么检查MifareClassic
支持的技巧将不再有效,显然......
在这里猜测,但您可以尝试使用所有技术过滤器,例如
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
</resources>
它可以读取我尝试过的大多数不受 Broadcom 芯片支持的卡。然后,您可以检查空或空的 NdefMessage。如果它包含信息,则它是 NXP 芯片。否则它的博通。
这确实打破了过滤器非常窄的概念,但我不确定你会如何做。
这也可能不适用于 s4,因为定制的三星固件只是消除了不兼容的标签。
可能还有另一种方式,因为当您扫描标签时,确切的技术列表(所有兼容的)会显示在 logcat 中。
我强烈怀疑这是可能的。所有硬件信息通常可以通过以下方式访问:http: //developer.android.com/reference/android/os/Build.html