发现NFC_TECH时打开AndroidActivity

Open Android Activity when NFC_TECH is discovered

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

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

我可以通过调用

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

它 returns 我有了包含所需数据的新意图 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" />

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 opened/notified 而无需在标签上写任何内容?

要在 NDEF_DISCOVERED 上打开您的 android 应用程序。

您必须设置您的自定义 mimeType。通过这样做,您让 android 知道这是您的自定义标签,并且此应用程序非常适合该标签。

注意:您不能指望您的应用程序打开您显示的所有标签 types/mime 类型。如您所知,这是用户对 select his/her 首选应用程序的选择。

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <!-- THIS ONE -->
    <data android:mimeType="application/com.myExample.myVeryOwnMimeType" /> 
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

您似乎已经发现自己,使用 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" />

问题出在您的技术过滤器 XML 文件上。您指定的技术过滤器转换为*匹配 IsoDep and NfcA and NfcB and[=27= 的任何标签] and NfcF and 等。由于其中一些标签技术(例如 Nfc[A|B|F|V])是相互排斥的,所以不标签将永远匹配此条件。

您可以通过指定一个与所有这些技术匹配的技术过滤器来解决这个问题 or:

<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>