Lecture et Ecriture de tags NFC avec Android

De $1

Table des matières
aucun titre

Version de 21:21, 19 Mai 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Dans cette séance, nous allons modifier l'application des séances précédentes afin d'y intégrer la technologie NFC.  Nous nous limiterons uniquement au mode de lecture/ecriture de tag.  A la fin de l'inscription d'un utilisateur, le serveur renvoie un numéro qui identifie de manière unique l'utilisateur sur le serveur; dans un premier tems, nous allons récupérer ce numéro l'écrire sur un tag NFC (le message est à écrire au format NDEF).  Dans un second temps, nous allons modifier l'activité (afficher) afin de lire l'identifiant de l'utilisateur dans un tag et récupérer les informations sur le serveur avant de l'afficher. 

Modification du Manifest

  • Vérifiez si le téléphone supporte la technologie NFC 
<uses-feature
android:name="android.hardware.nfc"
android:required="true"/>
  • Ajoutez les permissions necessaires à votre application afin de pouvoir utiliser le NFC. 
<uses-permissionandroid:name="android.permission.NFC"></uses-permission>

Ajoutez une nouvelle activité à votre application (TagWriterActivity).  Cette activité sera destinée à écrire des informations sur un tag NFC.  Après avoir inscrit un utilisateur sur le serveur, vous récupérerez l'identifiant unique renvoyé par le serveur puis vous appelerez l'activité créée précedemment en lui passant en paramètre l'identifiant à écrire sur le tag. 

Dans l'activité déclarez un attribut de type NfcAdapter 

NfcAdapter mNfcAdapter;

Surchagez la méthode onResume de l'activité pour activez la découverte de tag

@Override
    protected void onResume() {
        super.onResume();
        //Recupérez le lecteur NFC par défaut (normalement c'est celui qui est intégré au téléphone)
        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
        // Handle all of our received NFC intents in this activity.
        mNfcPendingIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

        // Nous voulons découvrir deux types de tag 
        //1) Ceux qui sont formattés NDEF 
        IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndefDetected.addDataType("text/plain");
        } catch (IntentFilter.MalformedMimeTypeException e) { }
        mNdefExchangeFilters = new IntentFilter[] { ndefDetected };

        // Et ceux qui ne sont pas encore formattés 
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        mWriteTagFilters = new IntentFilter[] { tagDetected };
       
        //Maintenant nous indiquons au capteur de nous notifier à la decouverte de ces deux types de tags 
        mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null);
        
    }