我想让我的应用程序拦截手机发现的所有标签。通过这种方式,我希望检查标记的uid,然后传递意图(显示应用程序选择器等)。
<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的意图过滤器:
<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标签应用程序就会启动。
有什么关于如何确保我可以看到所有标签的提示吗?
发布于 2012-01-26 09:03:54
首先,技术列表的工作方式是所有列出的技术都是ANDed在一起,这意味着如果标签列出了所有不同的技术,那么意图就会传递给应用程序。我不知道有没有这样做的。你想要做的是更多:
<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的卡,您可以使用
<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,但不能两者都有)提供多个意图过滤器。但这可能是因为我还不够努力。
如果另一个应用程序尝试执行相同的操作(捕获尽可能多的标签),您将始终使用它。因此,没有可能捕获每个单独的标签,除非你手机上有唯一的应用程序。但是,像你上面看到的那样格式化你的技术列表代码会让你更接近。
发布于 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意图。你的应用程序必须在前台。您不能保证您的应用程序以其他方式启动,因为任何其他应用程序都可以处理与您的应用程序相同的意图,因此将出现活动选择器。
https://stackoverflow.com/questions/9009043
复制相似问题