简体   繁体   中英

intent.getAction() is null inside onNewIntent() during NFC tag scan

This is my first time working with NFC Tags. I have declared the NFC scan activity like this in Manifest:

    <activity
        android:name=".main.NFCScanActivity"
        android:theme="@android:style/Theme.Holo.Light"
        android:launchMode="singleTop"
        android:exported="true">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.TECH_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>

Here is the nfc_tech_filter.xml file:

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

Whenever I scan my tag, onNewIntent() is call but when I try to call intent.getAction() inside onNewIntent, the value is always null.

@Override
protected void onNewIntent(Intent intent) {
    handleIntent(intent);
}
private void handleIntent(Intent intent) {
    String action = intent.getAction(); // action here is null
}

It is more normal to use one of the 2 Foreground NFC API's when you want to handle NFC's when your App is in the Foreground. Usually the Manifest NFC entries are only used to start your App by NFC trigger.

enableReaderMode is the better and newer of the 2 Foreground NFC Api's or there is the older enableForegroundDispatch

An example of using enableReaderMode

If using manifest entries for NFC you should really process the return of getIntent of your Activity in onCreate to see if that is an Intent created from an NFC trigger.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM