2016-06-07 1 views
1

Depuis que j'ai modifié mon enregistrement d'envoi de premier plan NFC pour utiliser le filtre d'intention TECH_DISCOVERED, je continue à devoir choisir entre plusieurs applications pour traiter la balise NFC. Existe-t-il un moyen de recevoir directement l'intention NFC dans mon application lorsqu'un tag est découvert?Le sélecteur d'intention est affiché avec le filtre TECH_DISCOVERED NFC et le système de répartition d'avant-plan

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, maintenant je comprends ce que tu as fait ;-) –

Répondre

1

Le filtre d'intention TECH_DISCOVERED nécessite une liste de technologies. Par conséquent, votre enregistrement d'avant-plan actuel n'écoute aucune technologie de tag.

Lorsque vous enregistrez ce filtre par l'intention manifeste, vous devez utiliser

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

pour le faire. De même, lorsque vous vous enregistrez pour l'envoi de premier plan avec la méthode enableForegroundDispatch(), vous devez spécifier une liste de technologies (un tableau de tableaux de chaînes) dans le dernier argument de enableForegroundDispatch(). Par exemple. pour écouter toutes les technologies de balises possibles (par exemple NFC-A ou NFC-B ou NFC-F ou NFC-V ou NFC-code à barres), vous pouvez utiliser:

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

Notez que si vous souhaitez filtrer pour tout étiquette à travers le système d'expédition de premier plan, vous pouvez également utiliser simplement le fourre-tout envoi de premier plan:

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

Cependant, il faut savoir que l'intention TAG_DISCOVERED sera livré à votre application dans ce cas.