gpt4 book ai didi

android - 发现 NFC_TECH 时打开 Android Activity

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:40 25 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序需要在扫描不包含除 ID 之外的任何数据(?)的 NFC 标签时打开

数据库中的项目应该由该 ID 标识,我不应该在这些标签上写任何东西

我可以通过调用

让设备以 前台模式扫描标签
enableForegroundDispatch()

它返回给我包含所需数据 EXTRA_ID

的新 Intent

但是当应用程序在后台并且我扫描标签时,我可以听到扫描完成的系统声音但应用程序没有打开

我的应用程序 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com