Commit 9e7a63d8f7d94bf7bbc18accf1e64c20bbbb44a4
1 parent
01212adb
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). Pas testé (si quelqu'un a les moyens de le faire, n'hésitez pas!) - Modification de MainActivity.java
Showing
1 changed file
with
60 additions
and
4 deletions
Show diff stats
App10p5/app/src/main/java/net/plil/clubinfo/app10p5/MainActivity.java
@@ -4,16 +4,21 @@ import android.app.PendingIntent; | @@ -4,16 +4,21 @@ import android.app.PendingIntent; | ||
4 | import android.content.Intent; | 4 | import android.content.Intent; |
5 | import android.content.IntentFilter; | 5 | import android.content.IntentFilter; |
6 | import android.nfc.NfcAdapter; | 6 | import android.nfc.NfcAdapter; |
7 | +import android.nfc.Tag; | ||
8 | +import android.nfc.tech.MifareClassic; | ||
7 | import android.nfc.tech.NfcA; | 9 | import android.nfc.tech.NfcA; |
8 | import android.os.Bundle; | 10 | import android.os.Bundle; |
9 | import android.support.design.widget.FloatingActionButton; | 11 | import android.support.design.widget.FloatingActionButton; |
10 | import android.support.design.widget.Snackbar; | 12 | import android.support.design.widget.Snackbar; |
11 | import android.support.v7.app.AppCompatActivity; | 13 | import android.support.v7.app.AppCompatActivity; |
12 | import android.support.v7.widget.Toolbar; | 14 | import android.support.v7.widget.Toolbar; |
15 | +import android.util.Log; | ||
13 | import android.view.Menu; | 16 | import android.view.Menu; |
14 | import android.view.MenuItem; | 17 | import android.view.MenuItem; |
15 | import android.view.View; | 18 | import android.view.View; |
16 | 19 | ||
20 | +import java.io.IOException; | ||
21 | + | ||
17 | public class MainActivity extends AppCompatActivity { | 22 | public class MainActivity extends AppCompatActivity { |
18 | 23 | ||
19 | private NfcAdapter mNfcAdapter; | 24 | private NfcAdapter mNfcAdapter; |
@@ -27,7 +32,7 @@ public class MainActivity extends AppCompatActivity { | @@ -27,7 +32,7 @@ public class MainActivity extends AppCompatActivity { | ||
27 | mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); | 32 | mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); |
28 | } | 33 | } |
29 | 34 | ||
30 | - // Convertit l'array de byte en chaîne hexadécimale. | 35 | + // Convertit l'array de byte en chaîne hexadécimale (si le byte = 0x63, str = "63"). |
31 | private String ByteArrayToHexString(byte [] inarray) { | 36 | private String ByteArrayToHexString(byte [] inarray) { |
32 | int i, j, in; | 37 | int i, j, in; |
33 | String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; | 38 | 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 { | @@ -78,7 +83,7 @@ public class MainActivity extends AppCompatActivity { | ||
78 | }; | 83 | }; |
79 | 84 | ||
80 | // Setup a tech list for all NfcF tags | 85 | // Setup a tech list for all NfcF tags |
81 | - mTechLists = new String[][]{new String[]{NfcA.class.getName()}}; | 86 | + mTechLists = new String[][]{new String[]{NfcA.class.getName(), MifareClassic.class.getName()}}; |
82 | } | 87 | } |
83 | 88 | ||
84 | @Override | 89 | @Override |
@@ -86,11 +91,62 @@ public class MainActivity extends AppCompatActivity { | @@ -86,11 +91,62 @@ public class MainActivity extends AppCompatActivity { | ||
86 | if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { | 91 | if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { |
87 | String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)); | 92 | String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)); |
88 | System.out.println("NFC Tag : " + id_carte); | 93 | System.out.println("NFC Tag : " + id_carte); |
89 | - taFonction(id_carte); | 94 | + |
95 | + //Lecture des données | ||
96 | + Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); | ||
97 | + MifareClassic mfc = MifareClassic.get(tag); | ||
98 | + byte[] data; | ||
99 | + String prenom = null, nom = null, login = null; | ||
100 | + | ||
101 | + if(mfc != null) { | ||
102 | + try { | ||
103 | + mfc.connect(); | ||
104 | + String cardData = null; | ||
105 | + | ||
106 | + //Clé A | ||
107 | + byte[] cleA = new byte[] { (byte)0xa0, (byte)0xa1, (byte)0xa2, | ||
108 | + (byte)0xa3, (byte)0xa4, (byte)0xa5 }; | ||
109 | + //On veut juste lire le secteur 12 | ||
110 | + boolean estConnecte = mfc.authenticateSectorWithKeyA(12, cleA); | ||
111 | + if (estConnecte) { | ||
112 | + //Il y a 4 blocs dans le secteur 12 -> INE, numéro étudiant, prénom, nom | ||
113 | + //On ne veut que prénom et nom, donc on passe les deux premiers | ||
114 | + for (int i = 2, bIndex = mfc.sectorToBlock(12) + i; i < 4; i++, bIndex++) { | ||
115 | + //sectorToBlock : Renvoie l'indice (global, parmis tous les blocs de | ||
116 | + // tous les secteurs) du premier bloc du secteur 12 | ||
117 | + //Lit les données du bloc | ||
118 | + data = mfc.readBlock(bIndex); | ||
119 | + | ||
120 | + //Convertit les bytes en String | ||
121 | + String dataStr = new String(data); | ||
122 | + if (i == 2) //Prénom | ||
123 | + prenom = dataStr; | ||
124 | + else if (i == 3) //Nom | ||
125 | + nom = dataStr; | ||
126 | + System.out.println("Données lues : " + dataStr); | ||
127 | + } | ||
128 | + } else { | ||
129 | + System.out.println("Erreur lors de la connection au secteur 12."); | ||
130 | + } | ||
131 | + mfc.close(); | ||
132 | + } catch (IOException e) { | ||
133 | + System.out.println(e.getLocalizedMessage()); | ||
134 | + } | ||
135 | + | ||
136 | + //Concaténation des données récupérées en login | ||
137 | + login = prenom; | ||
138 | + login.concat("."); | ||
139 | + login.concat(nom); | ||
140 | + } | ||
141 | + else | ||
142 | + System.out.println("Pas de connection possible à la technologie Mifare Classic."); | ||
143 | + | ||
144 | + //Éxécution de la fonction | ||
145 | + taFonction(id_carte, login); | ||
90 | } | 146 | } |
91 | } | 147 | } |
92 | 148 | ||
93 | - public void taFonction(String id_carte) | 149 | + public void taFonction(String id_carte, String login) |
94 | { | 150 | { |
95 | //code fonction | 151 | //code fonction |
96 | } | 152 | } |