2016-06-07 9 views
1

Seit ich meine NFC-Vordergrundversandregistrierung geändert habe, um den TECH_DISCOVERED Intent-Filter zu verwenden, muss ich zwischen mehreren Anwendungen wählen, um das NFC-Tag zu verarbeiten. Gibt es eine Möglichkeit, die NFC-Absicht in meiner App direkt zu erhalten, wenn ein Tag entdeckt wird?Intent-Auswahl wird mit NFC TECH_DISCOVERED-Filter und Vordergrundversandsystem angezeigt

public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter) { 
    final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); 
    IntentFilter[] mFilters = new IntentFilter[] { 
      ndef 
    }; 
    final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0); 
    adapter.enableForegroundDispatch(activity, pendingIntent, mFilters, null); 
} 

public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) { 
    adapter.disableForegroundDispatch(activity); 
} 
+0

Ah, jetzt bekomme ich was du gemacht hast ;-) –

Antwort

1

Der TECH_DISCOVERED Intent-Filter erfordert eine Tech-Liste. Folglich hört Ihre aktuelle Vordergrund-Dispatch-Registrierung auf keine Tag-Technologien überhaupt ab.

Wenn Sie diese Absicht Filter durch das Manifest registrieren, würden Sie

<meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
      android:resource="@xml/nfc_tag_filter" /> 

, das zu tun verwenden. Wenn Sie sich für die Vordergrundverteilung mit der Methode enableForegroundDispatch() registrieren, müssen Sie in dem letzten Argument von enableForegroundDispatch() eine Tech-Liste (ein Array von Zeichenfolge-Arrays) angeben. Z.B. zu hören für alle möglichen Tag Technologien (zB NFC-A oder NFC-B oder NFC-F oder NFC-V oder NFC-Barcode), verwenden Sie:

IntentFilter[] filters = new IntentFilter[] { 
     new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED), 
}; 
String[][] techList = new String[][] { 
     new String[] { NfcA.class.getName() }, 
     new String[] { NfcB.class.getName() }, 
     new String[] { NfcF.class.getName() }, 
     new String[] { NfcV.class.getName() }, 
     new String[] { NfcBarcode.class.getName() }, 
}; 
adapter.enableForegroundDispatch(activity, pendingIntent, filters, techList); 

Beachten Sie, dass, wenn Sie für jede filtern Tag durch den Vordergrund Versandsystem, kann Sie auch einfach den catch-all Vordergrund Versand verwenden:

adapter.enableForegroundDispatch(activity, pendingIntent, null, null); 

jedoch darüber im Klaren sein, dass eine TAG_DISCOVERED Absicht wird in diesem Fall, um Ihre Anwendung geliefert werden.