Pas*_*äki 2 android nfc intentfilter android-intent mifare
我正在开发一个应用程序,该应用程序在扫描不包含任何数据(?)的 NFC 标签时需要打开 ID。
数据库中的项目应该由该 ID 标识,我不应该在这些标签上写任何东西
我可以通过调用让设备在前台模式下扫描标签
enableForegroundDispatch()
Run Code Online (Sandbox Code Playgroud)
它以包含所需数据的新意图返回给我 EXTRA_ID
但是,当应用程序在后台并且我扫描标签时,我可以听到扫描完成的系统声音,但应用程序没有打开
我的应用程序清单上有以下意图过滤器
<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" />
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我正在扫描的标签类型 android.nfc.tech.MifareUltralight, android.nfc.tech.NfcA, android.nfc.tech.NdefFormatable
我只对标签 ID 感兴趣
是否可以在标签扫描时打开/通知我的活动而不在标签上写任何东西?
正如您似乎已经发现自己一样,使用 TECH_DISCOVERED 意图过滤器可以做到:
<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" />
Run Code Online (Sandbox Code Playgroud)
问题在于您的技术过滤器 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>
Run Code Online (Sandbox Code Playgroud)
或者你已经发现你的标签是 NfcA,你也可以简单地匹配 NfcA:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
</resources>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3368 次 |
| 最近记录: |