首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android NFC:拦截所有标签

Android NFC:拦截所有标签
EN

Stack Overflow用户
提问于 2012-01-26 03:32:42
回答 2查看 6.3K关注 0票数 2

我想让我的应用程序拦截手机发现的所有标签。通过这种方式,我希望检查标记的uid,然后传递意图(显示应用程序选择器等)。

代码语言:javascript
复制
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>

这就是我目前在清单中所拥有的,以及一个用于TAG_DISCOVERED的意图过滤器:

代码语言:javascript
复制
<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智能卡时,我的应用程序会被调用,当我在恩智浦ICODE i上使用不同的标签时,标准的android标签应用程序就会启动。

有什么关于如何确保我可以看到所有标签的提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-26 09:03:54

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

代码语言:javascript
复制
<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>

诸若此类。这就是你想要的不同标签。(NfcA或NfcB等)现在,这些技术中的一些结合在一起,比如NfcA和Ultralight或Ndef。因此,如果您想要捕获NfcA和Ndef的卡,您可以使用

代码语言:javascript
复制
<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.Ndef</tech>
</tech-list>

现在,与标签上的技术最匹配的应用程序将启动,或显示在选择菜单中。但是NDEF_DISCOVERED获得了比TECH_DISCOVERED更高的优先权。现在,NDEF_DISCOVERED intent launcher可以非常具体地指定要传递的标签。虽然NDEF的一些格式(如Mime类型)允许“全部捕获”过滤器(例如,"/“表示Mime),但有些格式不允许。(类似于uri格式的Ndef记录)。对于这些人来说,如果有一个特定的应用程序针对它,除非你知道它并内置它,否则你不能保证你的应用程序会启动。此外,我从来没有能够为Ndef标签(Mime或URI,但不能两者都有)提供多个意图过滤器。但这可能是因为我还不够努力。

如果另一个应用程序尝试执行相同的操作(捕获尽可能多的标签),您将始终使用它。因此,没有可能捕获每个单独的标签,除非你手机上有唯一的应用程序。但是,像你上面看到的那样格式化你的技术列表代码会让你更接近。

票数 7
EN

Stack Overflow用户

发布于 2012-01-27 04:03:35

理论上,你可以通过前台调度来做到这一点:

http://developer.android.com/guide/topics/nfc/advanced-nfc.html#foreground-dispatch

您需要处理所有NDEF_DISCOVERED MIME类型(/),然后处理所有TECH_DISCOVERED标记技术,以及TAG_DISCOVERED意图。你的应用程序必须在前台。您不能保证您的应用程序以其他方式启动,因为任何其他应用程序都可以处理与您的应用程序相同的意图,因此将出现活动选择器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9009043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档