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. #21
    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
    Par défaut
    Mais comment lances-tu ton application ? En cliquant sur l'icone ou un scannant un Tag ?

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bon, j'ai un nouveau problème que je n'ai pas vu venir :
    j'ai systématiquement un message me disant que "this device does not have NFC support", alors que l'application NFC Demo fonctionne très bien sur ce même émulateur...


    PS: Je la lance grâce à Eclipse (pas en présentant un tag car, pour le moment, je n'ai pas de matériel. Je dois tout faire avec l'emulateur)

    EDIT : Etes vous arrivé à faire fonctionner un processus complet de lecture, juste avec l'émulateur? (présentation de tag, lecture de son contenu)

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bon!

    Après plusieurs heures à m'arracher les cheveux, j'ai décidé d'utiliser la technique Sherlock Holmes : quand tout ce qui semble plausible a été écarté, il faut se rabattre vers l'impensable.

    J'ai commencé à "jouer" avec NFC Demo et la surprise est venue de ma tentative de déclarer un NfcAdapter
    Et bien, même avec NFC Demo le constat reste inchangé : "this device doesn't have NFC support"

  4. #24
    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
    Par défaut
    C'est normal, l'émulateur ne dispose pas d'un capteur NFC ...
    Et NFC Démo fonctionne tout de même car il ne se sert pas du capteur NFC, mais simule l'arrivée d'un TAG "à la main".

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bon,
    Et bien merci pour votre aide, je vais me procurer un téléphone NFC dans les prochains jours, ainsi que des tags : on verra
    En attendant, je fais des tests avec Rhomobile.
    Je vous le conseil, c'est plutot sympa.

  6. #26
    Membre éclairé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par défaut
    Citation Envoyé par Viish Voir le message
    Ce tutoriel 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 Viish,

    Merci beaucoup pour ce tutoriel simple, clair et concis.
    Les informations concernant le protocole NDEF sont bien résumées.
    Habitué au dev mobile NFC ( Nokia 6212, 6131 )
    Débutant sous dev Android, je me suis procuré un NEXUS S et j'assaye de faire un peu mumuse avec.

    Effectivement le sample NFCDemo emule des Tags, du coup pas tres utile pour quelqu'un qui veut vraiment utiliser le chip NXP,

    Cependant pas mal d'applications commencent à voir le jour sur le Market.

    J'en ai testé quelqu’une et c'a marche plutot bien ( Mifare ISO_A principalement ).

    Du coup je me suis amusé à envoyer des commandes aux ISO_B et j'arrive bien à recuperer quelques informations ( via des APDU ).

    Par contre les ISO_B' ne sont pas detectés ( c'est tres tres dommage )
    donc (certains) PassNAVIGO à oublier .


    En tout cas merci encore pour ce bon petit tutoriel

    Cordialement,

    Moulefrite

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    Bonjour moulefrite,

    En fait, j'en suis rendu au même point, ou pas loin, que toi, mais à un détail près : je travail avec un Nokia C7, je suis donc passé sur Qt, mais je n'arrive pas à détecter les cartes ISO B (Le B' ne sera jamais traité car beaucoup trop marginal dans son utilisation et surtout voué à la disparition dans les deux trois prochaines années. La RATP est en train de travailler à la migration)
    Enfin bref, es-tu arrivé à faire une simple détection ou as tu été obligé d'envoyer des apdu "dans le vent" pour pouvoir avoir une réaction de la carte?

    Merci d'avance de ton aide ou de l'aide de qui que ce soit qui pourrait avoir des informations intéressantes.

  8. #28
    Invité de passage
    Inscrit en
    Octobre 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1
    Par défaut Eclipse sources pour lecture NFC
    Bonjour,

    Je recherche un source complete de projet eclipse pour la lecture NFC.

    zegade

  9. #29
    Membre éclairé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    Bonjour moulefrite,

    En fait, j'en suis rendu au même point, ou pas loin, que toi, mais à un détail près : je travail avec un Nokia C7, je suis donc passé sur Qt, mais je n'arrive pas à détecter les cartes ISO B (Le B' ne sera jamais traité car beaucoup trop marginal dans son utilisation et surtout voué à la disparition dans les deux trois prochaines années. La RATP est en train de travailler à la migration)
    Enfin bref, es-tu arrivé à faire une simple détection ou as tu été obligé d'envoyer des apdu "dans le vent" pour pouvoir avoir une réaction de la carte?

    Merci d'avance de ton aide ou de l'aide de qui que ce soit qui pourrait avoir des informations intéressantes.
    Bonjour fantomchris,

    Désolé pour la réponse tardive.
    Pour la detection sur un phone Android, tu configure ton application pour prendre la main sur le chip NFC ( via les intent) du coup, cela te permettra d'utiliser une fonction dedié ( un genre de callBack ) et a partir de la, celle-ci sera appelé dès que ton smartPhone aura detecté une carte.
    ensuite tu enchaine tes APDUs pour faire mumuse avec.

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bonjour,
    j'ai suivi le tuto a la lettre...
    Tout fonctionne bien sauf que... l'appli tags fournie sur mon nexus s'ouvre directement sans que j'ai le choix de l'appli que je souhaite utiliser pour la lecture du tag.
    On dirait une ouverture par defaut...

    J'ai meme compilé l'appli demo nfc et ça fait pareil...

    Pourtant j'ai bien placé dans le manifest les lignes d'intent-filter pour le tag_discovered et le ndef_discovered.

    Une idée? Merci par avance...

  11. #31
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    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é
    ??? Tu peux avoir plusieurs intent-filter par activity ???

  12. #32
    Invité de passage
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Par défaut Help !! :p
    Bonjour,

    j'essaye de développer une petite application à l'aide de ton tuto et de la doc de google en //.

    j'ai suivi tes indications mais lors d'une lecture d'un tag mon application cesse de fonctionner.

    je veux que celle-ci lise un tag meme lorsqu'elle est fermée (d'ou le code dans onResume) et afficher le texte ainsi que l'ID du tag.

    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
    public class MainActivity extends Activity {
     
    	private Intent intent;
    	private NdefMessage[] msgs;
    	private EditText mEditText;
     
    	private EditText mID;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		mEditText = (EditText) findViewById(R.id.editText_msgs);
    		mEditText.setText("coucou");
     
    		mID = (EditText)findViewById(R.id.editText_id);
     
    	}
     
     
    	@Override
    	protected void onResume() {
    		// TODO Auto-generated method stub
    		super.onResume();
     
    		if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
     
    			Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 
     
    			if (rawMsgs != null){
    				msgs = new NdefMessage[rawMsgs.length];
    				for (int i = 0; i<rawMsgs.length; i++){
    					msgs[i]= (NdefMessage) rawMsgs[i];
     
    					NdefRecord record = msgs[i].getRecords()[i];
                    	byte[] id = record.getId();
     
                    	//mEditText.setText(id, id[0], id.length);
                    	short tnf = record.getTnf();
                    	byte[] type = record.getType();
                    	String message = getTextData(record.getPayload());
                    	//mEditText.setText(message);
    				}
    			}
    		}
    		//process the msgs array
     
    	}
     
    	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 "";
    	}
    et mon manifest

    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
    uses-sdk
            android:minSdkVersion="15"
            android:targetSdkVersion="15" />
        <uses-permission android:name="android.permission.NFC" />
     
        <uses-feature android:name="android.hardware.nfc" android:required="true" />
     
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.dinec.nfc.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
     
                <intent-filter >
                    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <data android:mimeType="text/plain" /> 
                </intent-filter>
     
                <intent-filter>     
                    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>     
                    <category android:name="android.intent.category.DEFAULT"/>    
                    <data android:scheme="http"               
                        android:host="developer.android.com"               
                        android:pathPrefix="/index.html" /> 
                        </intent-filter>          
     
            </activity>
        </application>
    Une idée ?

    la partie pour afficher le texte et l'id dans les EditText respectifs n'est pas encore faite...

    Merci d'avance

  13. #33
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Par défaut du java vers Python...
    Bonjour,
    Je sais que ce tutoriel est paru il y a longtemps, mais il n'est jamais trop tard pour découvrir les nouveautés.
    J'essaie donc d'implémenter une application pilotant l'interface NFC en python sur Android / Samsung S4. Mon premier essai est la lecture d'un tag NFC.
    Je m'inspire du code suivant : http://python-for-android.readthedoc...droid.activity.
    J'utilise le lanceur de programme KIVY, j'utilise PYJNIUS pour l'accès aux objets android, j'arrive à accéder au lecteur NFC (je vérifie qu'il est 'enabled' ou non), mais je n'arrive pas à recevoir de notification 'onNewIntent' lorsque je 'tap' un tag.
    Je ne cherche pas à lancer une application sur détection d'un tag, mais je veux positionner une "callback" dans mon application "in front" qui sera appelée lorsqu'un tag sera lu par l'interface NFC.

    Voila un résumé du code: Ce n'est pas un problème de codage que je cherche à résoudre, mais un problème de conception / compréhension du pilotage du NFC :

    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
    import time
     
    g_app = None
    global PythonActivity
    PythonActivity = None
    global Intent
    Intent = None
    global NfcAdapter
    NfcAdapter = None
    global NdefMessage
    NdefMessage = None
     
    import android.activity
    from jnius import autoclass
    from jnius import cast
     
    PythonActivity = autoclass('org.renpy.android.PythonActivity')
    Intent = autoclass('android.content.Intent')
    NfcAdapter = autoclass("android.nfc.NfcAdapter")
    NdefMessage = autoclass("android.nfc.NdefMessage")
     
    # ==========
    def log(msg) :
    	# logging.etc...
    #EndDef
     
    # ==========
    def on_new_intent_received(intent):
    	log("on_new_intent_received > enters..." + intent.getAction())
    #EndDef
     
    currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
     
    nfcAdapter = NfcAdapter.getDefaultAdapter()
     
    if nfcAdapter.isEnabled() == True :
    	log("nfcAdapter.isEnabled() == True")
     
    	android.activity.bind( on_new_intent = on_new_intent_received)
     
    	intent = Intent()
    	intent.setAction( NfcAdapter.ACTION_TAG_DISCOVERED)
    	intent.setFlags( Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP)
    	currentActivity.startActivity( intent)
     
    	while True :
    		time.sleep(1.0)
    	#EndWhile
    else:
    	log("nfcAdapter.isEnabled() == False")
    #EndIf
    Cordialement.

  14. #34
    Invité de passage
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Par défaut
    Bonsoir tout le monde;

    Je voudrais savoir si il était possible de programmer l'ouverture d'un onglet dans une application uniquement par le signal nfc, ou autre signal du genre. C'est à dire que je puisse ouvrir certaines onglets de mon application juste en touch, mais que d'autres uniquement en présence du signal nfc, ou rfid.

    Ca me fait penser un peu au système que utilise la RATP avec le pass navigo, mais donc mon cas, juste un un signal pour pouvoir ouvrir un onglet spécifique dans mon application.

    J'espere que j'ai ete assez claire .

    Merci de votre compréhension et bonne soirée à tous .

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