Приложение NF C Scan запускается только в том случае, если NF C Type 2 - PullRequest
0 голосов
/ 13 февраля 2020

Я создал приложение NF C, которое может читать тег NF C. Это работает хорошо. (Со всеми типами)

Но со вчерашнего дня я пытаюсь автоматически запустить мое приложение, как только на моем устройстве сохраняется тег NF C.

Итак, я обновил свой манифест:

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

И удивительно, он работает только тогда, когда я держите NF C Type 2 против моего устройства. Я пробовал использовать ключ моего устройства (Mifare Classi c) и свою банковскую карту (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

1 Ответ

0 голосов
/ 13 февраля 2020

ACTION_TAG_DISCOVERED:

Это намерение запускается, если никакие действия не обрабатывают намерения ACTION_NDEF_DISCOVERED или ACTION_TECH_DISCOVERED.

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

Вы получаете это намерение, когда никто не захватил его, поэтому в вашей настройке есть что-то не так.

Вы можете зафиксировать это явно как:

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