我正在开发一个应用程序,需要在扫描 NFC 标签时打开该应用程序,该标签不包含除 ID 之外的任何数据(?)。
数据库中的项目应该由该 ID 标识,并且我不应该在这些标签上写任何内容
我可以通过调用让设备在前台模式下扫描标签
enableForegroundDispatch()
它会向我返回包含所需数据的新 Intent EXTRA_ID
但是,当应用程序在后台运行并且我扫描标签时,我可以听到扫描完成的系统声音,但应用程序未打开
我的应用程序 list 上有以下 Intent 过滤器
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
nfc_tech_filter.xml包含Android支持的所有标签
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<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.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
</resources>
我正在扫描的标签类型为 android.nfc.tech.MifareUltralight、android.nfc.tech.NfcA、android.nfc.tech.NdefFormatable
我只对标签 ID 感兴趣
是否可以在标签扫描时打开/通知我的 Activity ,而无需在标签上写入任何内容?
最佳答案
正如您自己似乎已经发现的那样,可以使用 TECH_DISCOVERED Intent 过滤器:
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
问题出在您的技术过滤器 XML 文件上。您指定的技术过滤器将转换为*匹配 IsoDep 和 NfcA 和 NfcB 和 和 NfcF 和等任何标签。由于其中一些标签技术(例如 Nfc[A|B|F|V])是互斥的,因此任何标签都不会匹配此条件。
您可以通过指定一个技术过滤器来克服这个问题,该技术过滤器将所有这些技术与逻辑或相匹配:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
</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>
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NdefFormatable</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareClassic</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcBarcode</tech>
</tech-list>
</resources>
或者,由于您已经发现您的标签是 NfcA,您也可以简单地匹配 NfcA:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
</resources>
关于android - 发现 NFC_TECH 时打开 Android Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41615851/