我希望我的应用程序拦截手机发现的所有标签。这样我想检查标签的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 smartcard时,我的应用程序被称为,当我使用与nxp icode ics的不同标签时,标准的Android标签应用程序就会启动。

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

有帮助吗?

解决方案

首先,Tech-list工作的方式是所有的技术都被列出,这意味着如果标签列出所有不同的技术,则意味着该意图将传递给应用程序。我不知道任何那样。你想要做的是更多:

<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和Ulllight或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的 / ”for mime),但有些则不会。 (喜欢用于URI格式的NDEF记录)。对于那些,如果有一个特定的应用程序,否则除非您知道并建立它,否则您将无法保证您的应用程序将被推出。此外,我从未能够为NDEF标签(MIME或URI)拥有多个意图过滤器(但不是两者)。但这可能是我没有努力努力。

如果另一个应用程序尝试这样做(捕获尽可能多的标签),则将始终调用它。因此,除非您拥有手机上唯一的应用程序,否则无法捕获每一个标记的可能方法。但是格式化您的技术列表代码,就像你看到上面会让你更近。

其他提示

理论上可以用前景调度执行此操作:

http://developer.android.com/指南/主题/ NFC / Advanced-NFC.HTML#前景调度

您需要处理所有ndef_discovered mime类型( / ),然后是所有Tech_discovered标签技术,以及Tag_discovered Intent。您的应用程序必须在前台。您无法确保保证您的应用程序否则,因为任何其他应用程序都可以始终处理与您的应用程序相同的意图,因此将出现活动选择器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top