IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

[Tutoriel] Introduction à l'utilisation du NFC dans les applications Android [Tutoriel]


Sujet :

API standards et tierces Android

  1. #1
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut [Tutoriel] Introduction à l'utilisation du NFC dans les applications Android
    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.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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

  3. #3
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Bonjour,

    Je suis désolé mais je ne comprend pas votre question.
    Quelles sont les méthodes "à modifier" que vous ne comprenez pas ?
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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à:
    Pour 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.
    Mais cela implique d'être en train de modifier un projet existant, possédant cette méthode onResume
    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:
    Vérifions maintenant dans resoudreIntent la présence d'un Tag dans l'Intent passé en paramètre :
    Je ne trouve pas de projet contenant, de bas, cette méthode resoudreIntent
    Y a-t-il un package particulier à installer?

    Vous basez vous sur le projet NFC Demo?

    Merci d'avance de votre aide

  5. #5
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    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.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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?

  7. #7
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Non, je me base sur une Activity vierge que je crée. Mais tu remarqueras qu'au final elle ressemble à l'Activity NFC Demo.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    ... euh ... j'ai du mal à la remarquer sachant que rien ne dit ce qu'il y a dedans ...

  9. #9
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    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).
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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

  11. #11
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    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.
    Sinon oui, il faut l'appeler depuis le onCreate() avec comme paramètre getIntent().

    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.
    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.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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

    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);
        }
    }
    J'ai deux choses bizarres:
    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>

  13. #13
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    En fait, je me demandais si il serait envisageable de mettre le projet Eclipse disponible sur developpez.com?
    Le projet eclipse est déjà sur developpez.com
    http://www.developpez.net/forums/d58...arger-eclipse/
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Je parlais du projet NFC...

  15. #15
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    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.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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?

  17. #17
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    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.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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.

  19. #19
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Peux tu faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("Action", intent.getAction());
    dans le resoudreIntent, avant le
    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();
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    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é

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/07/2012, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo