From 9e7a63d8f7d94bf7bbc18accf1e64c20bbbb44a4 Mon Sep 17 00:00:00 2001 From: marianne-butaye Date: Thu, 7 Apr 2016 23:40:31 +0200 Subject: [PATCH] Version avec la technologie Mifare Classic pour la lecture du login (fonctionne quand même sur les tablettes non-compatibles, mais le login récupéré sera égal à null). --- App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java b/App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java index 6e5593a..28cf6c7 100644 --- a/App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java +++ b/App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java @@ -4,16 +4,21 @@ import android.app.PendingIntent; import android.content.Intent; import android.content.IntentFilter; import android.nfc.NfcAdapter; +import android.nfc.Tag; +import android.nfc.tech.MifareClassic; import android.nfc.tech.NfcA; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import java.io.IOException; + public class MainActivity extends AppCompatActivity { private NfcAdapter mNfcAdapter; @@ -27,7 +32,7 @@ public class MainActivity extends AppCompatActivity { mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); } - // Convertit l'array de byte en chaîne hexadécimale. + // Convertit l'array de byte en chaîne hexadécimale (si le byte = 0x63, str = "63"). private String ByteArrayToHexString(byte [] inarray) { int i, j, in; String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; @@ -78,7 +83,7 @@ public class MainActivity extends AppCompatActivity { }; // Setup a tech list for all NfcF tags - mTechLists = new String[][]{new String[]{NfcA.class.getName()}}; + mTechLists = new String[][]{new String[]{NfcA.class.getName(), MifareClassic.class.getName()}}; } @Override @@ -86,11 +91,62 @@ public class MainActivity extends AppCompatActivity { if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)); System.out.println("NFC Tag : " + id_carte); - taFonction(id_carte); + + //Lecture des données + Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); + MifareClassic mfc = MifareClassic.get(tag); + byte[] data; + String prenom = null, nom = null, login = null; + + if(mfc != null) { + try { + mfc.connect(); + String cardData = null; + + //Clé A + byte[] cleA = new byte[] { (byte)0xa0, (byte)0xa1, (byte)0xa2, + (byte)0xa3, (byte)0xa4, (byte)0xa5 }; + //On veut juste lire le secteur 12 + boolean estConnecte = mfc.authenticateSectorWithKeyA(12, cleA); + if (estConnecte) { + //Il y a 4 blocs dans le secteur 12 -> INE, numéro étudiant, prénom, nom + //On ne veut que prénom et nom, donc on passe les deux premiers + for (int i = 2, bIndex = mfc.sectorToBlock(12) + i; i < 4; i++, bIndex++) { + //sectorToBlock : Renvoie l'indice (global, parmis tous les blocs de + // tous les secteurs) du premier bloc du secteur 12 + //Lit les données du bloc + data = mfc.readBlock(bIndex); + + //Convertit les bytes en String + String dataStr = new String(data); + if (i == 2) //Prénom + prenom = dataStr; + else if (i == 3) //Nom + nom = dataStr; + System.out.println("Données lues : " + dataStr); + } + } else { + System.out.println("Erreur lors de la connection au secteur 12."); + } + mfc.close(); + } catch (IOException e) { + System.out.println(e.getLocalizedMessage()); + } + + //Concaténation des données récupérées en login + login = prenom; + login.concat("."); + login.concat(nom); + } + else + System.out.println("Pas de connection possible à la technologie Mifare Classic."); + + //Éxécution de la fonction + taFonction(id_carte, login); } } - public void taFonction(String id_carte) + public void taFonction(String id_carte, String login) { //code fonction } -- libgit2 0.21.2