Question

Je veux que mon application intercepte toutes les balises découvertes par le téléphone. De cette façon, je souhaite vérifier l'UID de la balise et transmettre l'intention par la suite (afficher un choix de demande, etc.).

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

C'est ce que j'ai actuellement dans mon manifeste, avec un filtre d'intention pour tag_Discovered:

<tech-list>
     <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.IsoDep</tech>
     <tech>android.nfc.tech.MifareClassic</tech>
     <tech>android.nfc.tech.Ultralight</tech>
     <tech>android.nfc.tech.Ndef</tech>
     <tech>android.nfc.tech.NdefFormatable</tech>
 </tech-list>

Lorsque je scanne une carte à puce mifare, mon application est appelée, lorsque j'utilise différentes balises avec NXP ICS ICS, l'application standard Android Tag est lancée.

Un indice sur la façon dont je peux m'assurer que je peux voir toutes les balises?

Était-ce utile?

La solution

Tout d'abord, la façon dont une liste de technologie fonctionne est que toutes les technologies répertoriées sont ensemble, ce qui signifie que l'intention est transmise à l'application si la balise a tous les différents techniciens répertoriés. Je n'en connais pas. Ce que vous voulez faire, c'est plus:

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
    <tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
    <tech>android.nfc.tech.NfcF</tech>
</tech-list>

etc. Ceci est les différentes balises que vous souhaitez. (NFCA ou NFCB etc.) Maintenant, certains de ces technologies vont ensemble, comme la NFCA et UltraLight ou NDEF. Donc, si vous voulez attraper une carte qui est NFCA et NDEF, vous utiliseriez

<tech-list>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.Ndef</tech>
</tech-list>

Désormais, l'application qui correspond le mieux à la technologie sur la balise serait lancée ou sera affichée dans un menu de sélection. Mais NDEF_Discovered obtient la priorité sur Tech_Discovered. Maintenant, le lanceur d'intention NDEF_DISCOVERED peut être très spécifique dans les balises qui sont transmises. Alors que certains formats de NDEF (comme le type MIME) permettent des filtres "attraper tous" (exemple, "/"Pour MIME), certains ne le font pas. (Comme pour un enregistrement NDEF formaté URI). Pour ceux-ci, s'il y a une application spécifique le ciblant, sauf si vous le savez et le construisez, vous ne pourrez pas garantir que votre L'application sera lancée. Je n'ai pas non plus pu avoir plus d'un filtre d'intention pour les balises NDEF (MIME ou URI, mais pas les deux). Mais cela pourrait être que je n'ai pas essayé assez fort.

Et si une autre application essaie de faire de même (attraper autant de balises que possible), vous serez toujours appelé avec. Il n'y a donc pas de moyen possible d'attraper chaque balise, sauf si vous avez la seule application au téléphone. Mais la mise en forme de votre code de liste de technologie comme vous le voyez ci-dessus vous rapprochera beaucoup.

Autres conseils

Vous pouvez théoriquement le faire avec l'envoi de premier plan:

http://developer.android.com/guide/topics/nfc/advanced-nfc.html#foreground-dispatch

Vous devez gérer tous les types MIME NDEF_Discovered (/), puis toutes les technologies TAG_Discovered, ainsi que l'intention TAG_DISCOVERED. Votre application doit être au premier plan. Vous ne pouvez pas garantir que votre application est démarrée autrement car toute autre application peut toujours gérer la même intention que votre application, et donc le sélecteur d'activité apparaîtra.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top