NF C - OnNewIntent () иногда не работает на устройстве android - PullRequest
0 голосов
/ 17 июня 2020

Я обнаружил в своем приложении карту с поддержкой NF C для чтения значения тега. Ниже приведен мой код

OnCreate ()

 nfcAdapter = NfcAdapter.getDefaultAdapter(AuthDriverCard.this);
    piTap = PendingIntent.getActivity(
            this, TAP_REQUEST_CODE, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), PendingIntent.FLAG_UPDATE_CURRENT);
    IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    IntentFilter techDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
    nfcIntentFilter = new IntentFilter[]{techDetected, tagDetected, ndefDetected};

OnResume

 if (nfcAdapter != null) {
        nfcAdapter.enableForegroundDispatch(AuthDriverCard.this, piTap, nfcIntentFilter, null);
    }

OnPause

 if (nfcAdapter != null) {
        nfcAdapter.enableForegroundDispatch(AuthDriverCard.this, piTap, nfcIntentFilter, null);
    }

OnNewIntent ()

  protected void onNewIntent(Intent intent) {
    // my logic here
   }

Этот код почти всегда работает нормально. Но какое-то время card is not detecting и я обнаружил, что OnNewIntent() is not firing.

В чем может быть проблема. Нужно ли мне также set intent filter in manifest? Я пока не установил его в манифесте, но у меня это сработало без проблем. Есть ли проблема в моем коде java?

Пожалуйста, предложите

ПРИМЕЧАНИЕ - Перезапустите (после закрытия приложения) приложение, чтобы решить проблему. обнаружение карты работает после этого.

1 Ответ

0 голосов
/ 17 июня 2020

Вам необходимо добавить следующее в раздел intent-filter файла манифеста, если вы еще не добавили:

<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>

Например:

<application
    android:icon="@drawable/app_icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".activities.LauncherActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
            <action android:name="android.nfc.action.TAG_DISCOVERED"/>
            <action android:name="android.nfc.action.TECH_DISCOVERED"/>

            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
...