- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个应用程序,该应用程序需要在扫描不包含除 ID 之外的任何数据(?)的 NFC 标签时打开。
数据库中的项目应该由该 ID 标识,我不应该在这些标签上写任何东西
我可以通过调用
让设备以 前台模式扫描标签enableForegroundDispatch()
它返回给我包含所需数据 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" />
问题出在您的 tech-filter XML 文件上。您指定的技术过滤器转换为*匹配 IsoDep and NfcA and NfcB and and 的任何标签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/29794021/
我正在开发一个应用程序,需要在扫描 NFC 标签时打开该应用程序,该标签不包含除 ID 之外的任何数据(?)。 数据库中的项目应该由该 ID 标识,并且我不应该在这些标签上写任何内容 我可以通过调用让
我正在开发一个应用程序,该应用程序需要在扫描不包含除 ID 之外的任何数据(?)的 NFC 标签时打开。 数据库中的项目应该由该 ID 标识,我不应该在这些标签上写任何东西 我可以通过调用让设备以前台
我是一名优秀的程序员,十分优秀!