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 :

Problème lecture et écriture tag NFC MifareUltralight


Sujet :

API standards et tierces Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème lecture et écriture tag NFC MifareUltralight
    Bonjour, Je suis actuellement en stage pour ma dernière année d'étude. Pour ce stage je doit réaliser une application Android utilisant des tag NFC, plus précisément des NTAG216.

    Ces tag sont protégés en lecture et en écriture par un mot de passe. Lorsqu'un tag est a porté, je doit lire son contenu puis ensuite réécrire par dessus. Voici actuellement mon code :

    Activity

    Code Java : 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
           @Override
    	protected void onNewIntent(Intent intent){
     
    				String tagUID = "";
    		if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())&&connect&&rondeEnCours&&!scanEnCours){
    			scanEnCours=true;
    				mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
    				try {
     
    					TagTypeFound tagType = new TagTypeFound(mytag);//récupération du type de tag
    					int nombrePage=tagType.getNombrePage();//récupération du nombre de pages
    					EcritureLectureTag ecritureLectureTag=new EcritureLectureTag(mytag,nombrePage);
    					calendrier.miseAJourCalendrier();//mise à jour de l'heure
    					String dateEtHeure=client.getLogin()+"/"+calendrier.getJour()+"/"+calendrier.getMois()+"/"+calendrier.getAnnee()+"/"+calendrier.getHeure()+"/"+calendrier.getMin();
     
    					String allHistorique = ecritureLectureTag.read();//lecture du contenu du tag
    					ecritureLectureTag.writeHistorique(allHistorique,dateEtHeure);//enregistrement du nouvelle historique
     
    					tagUID = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));//récupération de l'uid
     
    				    } catch (Exception e) {
    				    error(e.toString());
    				    }
    			scanEnCours=false;
    			   }
    	}


    Classe EcritureLectureTag

    Code Java : 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
    74
    75
    76
    public class EcritureLectureTag {
        Tag tag;
        int nombrePage;
        boolean flagEnCours = false;
     
        public EcritureLectureTag(Tag mytag, int nbPage) {
            tag = mytag;
            nombrePage = nbPage;
        }
     
        public void write(String message) {
            MifareUltralight mifare = MifareUltralight.get(tag);
            int nombreCaractètre = message.length();
            try {
                mifare.connect();
                //authentification
                byte[] response = mifare.transceive(new byte[]{
                        (byte) 0x1B, // PWD_AUTH
                        0x10, 0x10, 0x10, 0x10
                });
                for (int i = 0; i <= (nombreCaractètre / 4) && i < nombrePage; i++) {
                    int end = (i + 1) * 4;
                    if (end > nombreCaractètre) {
                        end = nombreCaractètre;
                    }
                    String stringMessage = message.substring(i * 4, end);
                    while (stringMessage.length() < 4) {
                        stringMessage = stringMessage + " ";
                    }
                    byte[] byteMessage = stringMessage.getBytes(Charset.forName("US-ASCII"));
                    if (mifare.isConnected()) {
                        mifare.writePage(i + 4, byteMessage);
                    }
                }
                mifare.close();
            } catch (IOException e) {
                Log.i("WRITE", e.getMessage());
            } catch (InterruptedException e) {
                Log.i("WRITE", e.getMessage());
            }
        }
     
        public String read() {
            MifareUltralight mifare = MifareUltralight.get(tag);
            String message = "";
            try {
                mifare.connect();
                //authentification
                byte[] response = mifare.transceive(new byte[]{
                        (byte) 0x1B, // PWD_AUTH
                        0x10, 0x10, 0x10, 0x10
                });
                for (int i = 1; i < (nombrePage / 4); i++) {
                    byte[] ligne = mifare.readPages(i * 4);
                    String nouvelleLigne = new String(ligne, Charset.forName("US-ASCII"));
                    message = message + nouvelleLigne;
                }
                mifare.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return message;
        }
     
        public void writeHistorique(String allHistorique, String dateEtHeure) {
            String[] mess = allHistorique.split(":");
            String nouveauMessage = "";
            int nombreHistoriqe = 0;
            for (String historique : mess) {
                nombreHistoriqe = nombreHistoriqe + 1;
                nouveauMessage = nouveauMessage + ":" + historique;
            }
            nouveauMessage = dateEtHeure + nouveauMessage;
            write(nouveauMessage);
        }
    }


    problème

    Le code fonctionne dans le sens ou j'arrive à récupérer la valeur et à l'enregistrer. Cependant cella ne fonctionne qu'une foi sur 2, dans les cas ou cela ne fonctionne pas, lorsqu'un tag est détecté l'application va dans le try catch et j’obtiens l'erreur suivante : java.lang.illegalStateException : Close other technology first!. Quelqu'un saurait-il pourquoi j'obtiens cette erreur ou aurait une piste de résolution ?

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    est ce que tu pourrais mettre des balises CODE et indenter le code stp ? C'est assez difficile de suivre quand tout est aligné à gauche. :S

    Sinon concernant ton problème, la lecture des données se fait dans un asynctask que je ne crois pas avoir vu afin de ne pas bloquer l'UI

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour votre réponse, je vais regarder au asynctask.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/03/2015, 16h58
  2. Problème lecture écriture par bloc dans un fichier
    Par scary dans le forum Débuter
    Réponses: 5
    Dernier message: 22/04/2009, 19h28
  3. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. [communication série] problème lecture/écriture
    Par davinout dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 01/06/2005, 13h14

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