安卓 NFC : Intercept all Tags

标签 android android-intent nfc rfid

我希望我的应用拦截手机发现的所有标签。这样我想检查标签的 uid 并在之后传递 Intent (显示应用程序选择器等)。

<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>

这就是我目前在 list 中的内容,以及用于 TAG_DISCOVERED 的 Intent 过滤器:

<tech-list>
     <tech>android.nfc.tech.NfcA</tech>
     <tech>android.nfc.tech.NfcB</tech>
     <tech>android.nfc.tech.NfcF</tech>
     <tech>android.nfc.tech.NfcV</tech>
     <tech>android.nfc.tech.IsoDep</tech>
     <tech>android.nfc.tech.MifareClassic</tech>
     <tech>android.nfc.tech.Ultralight</tech>
     <tech>android.nfc.tech.Ndef</tech>
     <tech>android.nfc.tech.NdefFormatable</tech>
 </tech-list>

当我扫描 Mifare 智能卡时,我的应用程序会被调用,当我将不同的标签与 NXP ICODE IC 一起使用时,会启动标准的 android 标签应用程序。

关于如何确保我看到所有标签的任何提示?

最佳答案

首先,技术列表的工作方式是所有列出的技术都用 AND 连接在一起,这意味着如果标签列出了所有不同的技术, Intent 就会传递给应用程序。我不知道有什么做的。你想要做的是更多:

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
    <tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
    <tech>android.nfc.tech.NfcF</tech>
</tech-list>

等等。这 ORs 您想要的不同标签。 (NfcA 或 NfcB 等)现在这些技术中的一些结合在一起,比如 NfcA 和 Ultralight 或 Ndef。所以如果你想捕捉一张 NfcA 和 Ndef 的卡片,你会使用

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.Ndef</tech>
</tech-list>

现在,与标签上的技术最匹配的应用程序将启动,或显示在选择菜单中。但是 NDEF_DISCOVERED 优先于 TECH_DISCOVERED。现在 NDEF_DISCOVERED Intent 启动器可以非常具体地指定要传递的标签。虽然某些 NDEF 格式(如 Mime 类型)允许“捕获所有”过滤器(例如,Mime 的“/”),但有些则不允许。 (比如 uri 格式的 Ndef 记录)。对于那些,如果有针对它的特定应用程序,除非您知道并内置它,否则您将无法保证您的应用程序会启动。此外,对于 Ndef 标签(Mime 或 URI,但不能同时使用两者),我从未能够拥有多个 Intent 过滤器。但这可能是我不够努力。

如果另一个应用程序尝试做同样的事情(捕获尽可能多的标签),您将始终被它调用。因此,除非您在手机上安装了唯一的应用程序,否则不可能捕捉到每一个标签。但是像上面看到的那样格式化你的技术列表代码会让你更接近。

关于安卓 NFC : Intercept all Tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009043/

相关文章:

java - 如何在 robolectric 测试中添加一些一次性启动代码

android - 是否有可能有一个不在标签栏中的 fragment ?

android - 如何处理 Galaxy S4 分辨率,因为它对于 AndEngine RatioResolutionPolicy 来说太高了

nfc - 为什么有些NFC天线有两个发射器: TX1 and TX2?

android - NFC 支付如何运作?

android - 保护 WCF Web 服务,保持与 Android 和 Silverlight 的兼容性

android - 在 android 共享应用程序中选择默认 Intent

android - 记录在 Android 中启动的 Activity

java - Android 10 - 使用 PackageManager 安装新版本的 apk 而不是 Intents 并没有真正起作用

android - 如何从 HostApduService 向 Activity 发送消息?