c8059613
JLo'w
Re-fonte de l'app...
|
1
2
3
|
package com.example.app_10p5;
import android.app.Activity;
|
6feece85
JLo'w
ajout NFC
|
4
5
|
import android.app.PendingIntent;
import android.content.Intent;
|
6feece85
JLo'w
ajout NFC
|
6
7
8
|
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
|
c8059613
JLo'w
Re-fonte de l'app...
|
9
|
import android.os.Bundle;
|
6feece85
JLo'w
ajout NFC
|
10
11
|
import android.widget.Toast;
|
520cecde
JLo'w
Un petit plus, un...
|
12
13
|
import org.json.JSONObject;
|
6feece85
JLo'w
ajout NFC
|
14
|
import java.io.IOException;
|
520cecde
JLo'w
Un petit plus, un...
|
15
16
|
import java.net.URL;
import java.util.HashMap;
|
c8059613
JLo'w
Re-fonte de l'app...
|
17
18
19
20
|
/**
* Created by beaus on 24/04/2016.
*/
|
520cecde
JLo'w
Un petit plus, un...
|
21
|
public class CarteActivite extends Activity implements ASyncResponse {
|
6feece85
JLo'w
ajout NFC
|
22
23
|
private NfcAdapter mNfcAdapter;
|
520cecde
JLo'w
Un petit plus, un...
|
24
25
26
27
|
private HashMap<String, String> mParam;
private String mAPI;
public static final String HOST = "https://10p5.clubinfo.frogeye.fr/";
|
6feece85
JLo'w
ajout NFC
|
28
|
|
c8059613
JLo'w
Re-fonte de l'app...
|
29
30
31
32
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_carte);
|
6feece85
JLo'w
ajout NFC
|
33
|
|
520cecde
JLo'w
Un petit plus, un...
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
switch (getIntent().getIntExtra("state", MainActivite.STATE_RIEN)) {
case MainActivite.STATE_COMMANDE:
mParam.put("quantite", String.valueOf(getIntent().getIntExtra("quantite", -1)));
mParam.put("montant", String.valueOf(getIntent().getFloatExtra("montant", -1)));
mParam.put("token", getIntent().getStringExtra("token"));
mAPI = "api/client/payer";
break;
case MainActivite.STATE_CREATION_COMPTE:
//TODO: param
mAPI = "api/client/ajouter";
break;
case MainActivite.STATE_RECHARGEMENT:
//TODO: param
mAPI = "api/client/recharger";
break;
case MainActivite.STATE_VIDANGE:
//TODO: param
mAPI = "api/client/vidange";
break;
case MainActivite.STATE_CONNEXION:
case MainActivite.STATE_RIEN:
default:
Toast.makeText(this, "WTF, le cancer est dans l'application!!", Toast.LENGTH_LONG).show();
finish();
return;
}
|
6feece85
JLo'w
ajout NFC
|
62
63
|
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
|
93f90e35
JLo'w
NFC et foreground
|
64
65
66
67
68
|
if (mNfcAdapter == null) {
// Stop here, we definitely need NFC
Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();
finish();
return;
|
6feece85
JLo'w
ajout NFC
|
69
|
}
|
6feece85
JLo'w
ajout NFC
|
70
|
|
93f90e35
JLo'w
NFC et foreground
|
71
|
handleIntent(getIntent());
|
6feece85
JLo'w
ajout NFC
|
72
73
|
}
|
93f90e35
JLo'w
NFC et foreground
|
74
75
|
@Override
protected void onResume() {
|
6feece85
JLo'w
ajout NFC
|
76
|
super.onResume();
|
93f90e35
JLo'w
NFC et foreground
|
77
|
setupForegroundDispatch(this, mNfcAdapter);
|
6feece85
JLo'w
ajout NFC
|
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
}
// 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"};
String out= "";
for(j = 0 ; j < inarray.length ; ++j)
{
in = (int) inarray[j] & 0xff;
i = (in >> 4) & 0x0f;
out += hex[i];
i = in & 0x0f;
out += hex[i];
}
return out;
}
@Override
|
93f90e35
JLo'w
NFC et foreground
|
97
98
99
100
|
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
|
93f90e35
JLo'w
NFC et foreground
|
101
102
103
104
105
106
107
108
109
|
@Override
protected void onPause() {
stopForegroundDispatch(this, mNfcAdapter);
super.onPause();
}
private void handleIntent(Intent intent){
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
Toast toast;
|
6feece85
JLo'w
ajout NFC
|
110
|
String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
|
520cecde
JLo'w
Un petit plus, un...
|
111
|
mParam.put("ID", id_carte);
|
93f90e35
JLo'w
NFC et foreground
|
112
113
|
toast = Toast.makeText(getApplicationContext(), "ID Carte : " + id_carte, Toast.LENGTH_SHORT);
toast.show();
|
6feece85
JLo'w
ajout NFC
|
114
115
116
117
118
119
120
121
122
123
|
//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();
|
6feece85
JLo'w
ajout NFC
|
124
125
126
127
|
//Clé A
byte[] cleA = new byte[]{(byte) 0xa0, (byte) 0xa1, (byte) 0xa2,
(byte) 0xa3, (byte) 0xa4, (byte) 0xa5};
|
93f90e35
JLo'w
NFC et foreground
|
128
|
|
6feece85
JLo'w
ajout NFC
|
129
130
|
//On veut juste lire le secteur 12
boolean estConnecte = mfc.authenticateSectorWithKeyA(12, cleA);
|
93f90e35
JLo'w
NFC et foreground
|
131
|
|
6feece85
JLo'w
ajout NFC
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
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;
|
93f90e35
JLo'w
NFC et foreground
|
147
148
|
toast = Toast.makeText(getApplicationContext(), "Données lues : " + dataStr, Toast.LENGTH_SHORT);
toast.show();
|
6feece85
JLo'w
ajout NFC
|
149
150
|
}
} else {
|
93f90e35
JLo'w
NFC et foreground
|
151
152
|
toast = Toast.makeText(getApplicationContext(), "Erreur lors de la connection au secteur 12.", Toast.LENGTH_SHORT);
toast.show();
|
6feece85
JLo'w
ajout NFC
|
153
154
155
156
157
158
159
160
161
162
|
}
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);
|
6feece85
JLo'w
ajout NFC
|
163
|
} else {
|
93f90e35
JLo'w
NFC et foreground
|
164
165
|
toast = Toast.makeText(getApplicationContext(), "Pas de connection possible à la technologie Mifare Classic.", Toast.LENGTH_SHORT);
toast.show();
|
6feece85
JLo'w
ajout NFC
|
166
167
|
}
|
93f90e35
JLo'w
NFC et foreground
|
168
169
|
toast = Toast.makeText(getApplicationContext(), "Login Lille 1 : " + login, Toast.LENGTH_SHORT);
toast.show();
|
6feece85
JLo'w
ajout NFC
|
170
171
|
//Éxécution de la fonction
|
520cecde
JLo'w
Un petit plus, un...
|
172
173
|
clientAPI();
}
|
6feece85
JLo'w
ajout NFC
|
174
|
}
|
c8059613
JLo'w
Re-fonte de l'app...
|
175
|
|
93f90e35
JLo'w
NFC et foreground
|
176
177
178
179
180
|
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);
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
adapter.enableForegroundDispatch(activity, pendingIntent, null, null);
|
6feece85
JLo'w
ajout NFC
|
181
182
|
}
|
93f90e35
JLo'w
NFC et foreground
|
183
184
|
public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
adapter.disableForegroundDispatch(activity);
|
6feece85
JLo'w
ajout NFC
|
185
|
}
|
520cecde
JLo'w
Un petit plus, un...
|
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
public void clientAPI() {
try {
URL url = new URL(HOST + mAPI);
NetworkThread nt = new NetworkThread(url, mParam);
nt.execute();
}
catch (Throwable t){
Toast.makeText(this, "WTF, le cancer est dans l'application!!", Toast.LENGTH_LONG).show();
finish();
return;
}
}
/* Retour du NetworkThread */
@Override
public void processFinish(JSONObject output) {
//TODO: faire un retour vers l'activity parente des données reçues.
}
|
c8059613
JLo'w
Re-fonte de l'app...
|
206
|
}
|