Ce tutoriel Android publié dans la liste des meilleurs tutoriels pour apprendre Android a pour objectif de vous apprendre à manipuler le capteur NFC présent dans certains terminaux Android en vous expliquant comment envoyer et recevoir des données.
Ce tutoriel Android publié dans la liste des meilleurs tutoriels pour apprendre Android a pour objectif de vous apprendre à manipuler le capteur NFC présent dans certains terminaux Android en vous expliquant comment envoyer et recevoir des données.
Bonjour,
Je suis en train de me mettre au NFC, après avoir passé plusieurs années dans les cartes sans contact
Ce tutoriel Java m'a l'air très sympathique, mais il y a une chose qui m’ennuie profondément : quelle est la base qu'il faut prendre pour comprendre ce qui y est décrit?
Je suis d'accord sur les termes et les syntaxes, mais d'où sortent toutes ces méthodes à "modifier"?
Merci d'avance de votre aide
Bonjour,
Je suis désolé mais je ne comprend pas votre question.
Quelles sont les méthodes "à modifier" que vous ne comprenez pas ?
En fait, c'est plus en amont encore.
Ces modifications se font sur un projet de base.
Quand je lis ce tutoriel (ou peut-être n'ai-je absolument rien compris), il y est question d'ajouter des lignes par ci par là:
Mais cela implique d'être en train de modifier un projet existant, possédant cette méthode onResumePour que l'application au premier plan puisse gérer directement la découverte d'un TAG, il est nécessaire de modifier quelque peu la méthode onResume() de l'Activity.
Et c'est à ce moment là que mon problème survient:
- Soit il faut partir d'un projet, que je ne connais pas, et en modifier certaines parties
- Soit il faut partir d'un projet vierge, mais alors pourquoi parler de choses comme celle-ci:
Je ne trouve pas de projet contenant, de bas, cette méthode resoudreIntentVérifions maintenant dans resoudreIntent la présence d'un Tag dans l'Intent passé en paramètre :
Y a-t-il un package particulier à installer?
Vous basez vous sur le projet NFC Demo?
Merci d'avance de votre aide
En fait je pars du principe dans mon tutoriel que toute la gestion de la partie NFC se fait dans une Activity. A partir de là, quand je dis qu'il faut modifier la méthode onResume() c'est celle de l'Activity. Soit tu l'as déjà surchargée dans ton Activity et tu n'as qu'à la modifier en conséquence, soit il faut commencer par la surcharger (de la même manière que tu surcharges onCreate, onTouch, ...).
En revanche pour resoudreIntent c'est à vous de créer cette méthode, comme dis dans le tutoriel.
Une fois ceci fait, attaquons-nous à la partie Java du code. Créez dans votre classe une méthode (que je nommerai resoudreIntent) prenant en paramètre un Intent. [...] Que va faire cette méthode ? Tout simplement vérifier la présence d'un TAG dans l'Intent courant et le cas échéant le lire.
Ok, donc, vous basez-vous sur une Activity que VOUS avez créé pour gérer la lecture des Tags, ou plus simplement sur l'exemple NFCDemo?
Non, je me base sur une Activity vierge que je crée. Mais tu remarqueras qu'au final elle ressemble à l'Activity NFC Demo.
... euh ... j'ai du mal à la remarquer sachant que rien ne dit ce qu'il y a dedans ...![]()
Le tutoriel est du début à la fin l'explication du contenu de cette classe, avec au final tout le code nécessaire (en dehors du squelette classique d'une Activity Android).
Ah d'accord, mais où est passé l'appel à resoudreIntent
Est ce implicite de considérer que son appel est fait depuis la surcharge de onNewIntent(Intent intent)
Enfin bref, je dois avouer que pour le coup, je suis paumé dans ce "tuto" qui me semble bien plus avancé qu'il n'y parait
Sinon oui, il faut l'appeler depuis le onCreate() avec comme paramètre getIntent().Si votre Activity peut être déjà lancée par votre programme, vous devrez surcharger la méthode OnNewIntent(Intent intent) et y effectuer de la même manière un appel à votre resoudreIntent.
En effet ce tutoriel Android n'a pas pour vocation d'être destiné aux débutants en Android, mais plutôt à ceux en ayant déjà une bonne connaissance et désirant aller plus loin dans le développement.II. Prérequis
Pour une bonne compréhension de ce tutoriel vous devrez disposer des connaissances de base en Java et en développement d'applications Android. Les notions d'Activity, Intent, Context et Manifest doivent vous être familières. Je ne me focaliserai donc pas sur la façon dont on code une application, ni sur la structure du projet, mais bien sur le code directement.
Ah beh je pensais avoir au moins les bases...
Visiblement non, il me manque des morceaux...
En fait, je me demandais si il serait envisageable de mettre le projet Eclipse disponible sur developpez.com?
Bon, voici mon code
J'ai deux choses bizarres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
62
63
64
65
66
67
68
69
70
71
72
73 package nfc.test.read; import java.io.UnsupportedEncodingException; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.Parcelable; public class RActivity extends Activity { NfcAdapter mAdapter; void resolveIntent(Intent intent) { String action = intent.getAction(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage[] messages; if (rawMsgs != null) { messages = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { messages[i] = (NdefMessage) rawMsgs[i]; NdefRecord record = messages[i].getRecords()[i]; byte[] id = record.getId(); short tnf = record.getTnf(); byte[] type = record.getType(); String message = getTextData(record.getPayload()); } } } else { finish(); return; } } String getTextData(byte[] payload) { String texteCode = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16"; int langageCodeTaille = payload[0] & 0077; try { return new String(payload, langageCodeTaille + 1, payload.length - langageCodeTaille - 1, texteCode); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mAdapter = NfcAdapter.getDefaultAdapter(this); } public void onNewIntent(Intent intent) { setIntent(intent); resolveIntent(intent); } public void onResume() { PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); mAdapter.enableForegroundDispatch(this, pendingIntent, null, null); } }
L'application ne se lance pas automatiquement
Quand je la lance, elle crash en me disant que mAdaprter est null...
Mon manifest contient ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nfc.test.read" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.NFC" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".RActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <action android:name="android.nfc.action.TAG_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application> </manifest>
Bonjour,
Le projet eclipse est déjà sur developpez.comEn fait, je me demandais si il serait envisageable de mettre le projet Eclipse disponible sur developpez.com?
http://www.developpez.net/forums/d58...arger-eclipse/
Je regarderai ce soir si je peux résoudre ton problème par rapport à ton code et si je retrouve le projet je le posterai.
Merci
J'aimerais bien m'en sortir car je trouve le projet NFC Demo pas du tout représentatif de la techno
EDIT: Pas de nouvelle?
En fait tu n’appelles pas dans ton code la méthode résoudreIntent dans le OnCreate. C'est pour cela que ça ne marche pas.
Appeler cette méthode dans onNewIntent ne sert que si ton Activity peut être déjà lancée et au premier plan au moment de la détection du Tag.
Bonjour,
Tout d'abord merci, et ensuite, toutes mes excuses car j'ai oublié de mettre à jour mon code. J'avais ajouté la resolveIntent(getIntent()); à mon onCreate, mais le comportement m'échappe un peu : l'appli se lance mais disparait immédiatement...
Je ne vois pas ce qui fait que celle-ci semble partir en tache de fond.
Peux tu faire undans le resoudreIntent, avant le
Code : Sélectionner tout - Visualiser dans une fenêtre à part Log.d("Action", intent.getAction());?
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
J'ai l'impression qu'il passe dans le else et fait un finish();
Dans le logcat, j'obtiens "Action android.intent.action.MAIN"
Ah beh oui, forcément, il faut que je fasse deux activity : une qui affiche l'autre... Je crois qu'un détail m'a échappé
Partager