我的 NFC 扫描应用程序仅在 NFC 类型 2 时启动

My NFC Scan application starts only if NFC Type 2

我做了一个可以读取NFC标签的NFC应用。它运作良好。 (所有类型)

但是从昨天开始,一旦我的设备维护了 NFC 标签,我就尝试自动启动我的应用程序。

所以我更新了我的清单:

        <activity android:name=".MainActivity" android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </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" />
        </activity>

那么,这是我的nfc_tech_filter.xml

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

令人惊讶的是,它仅在我将 NFC Type 2 靠近我的设备时才起作用。 我已经尝试使用我的公寓钥匙 (Mifare Classic) 和我的银行卡 (IsoDep),但它没有启动我的应用程序...... 我指定它在我的应用程序已经启动时工作。

有什么想法吗?

编辑:

这是我现在的清单:


        <activity android:name=".MainActivity" android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" />
        </activity>

现在,当我通过我的银行卡时,它打开应用程序但没有显示任何结果。

Parcelable[] rawMessages =
                    intent.getParcelableArrayExtra(NfcAdapter.EXTRA_TAG);

rawMessages 变量之后为 NULL。如果我把 NfcAdapter.EXTRA_NDEF_MESSAGES

ACTION_TAG_DISCOVERED:

This intent is started if no activities handle the ACTION_NDEF_DISCOVERED or ACTION_TECH_DISCOVERED intents.

https://developer.android.com/guide/topics/connectivity/nfc/nfc

当没有其他人捕获它时,你得到了这个 Intent,所以你的设置有问题。

您可以像这样明确捕获它:

<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>