package com.roly.nfc.crypto.util; import android.content.Intent; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.os.Parcelable; public class NfcUtils { private NfcUtils(){} /** * Récupère la liste des NdefRecords contenus dans chaque NdefMessages */ public static NdefRecord[][] getNdefRecords(NdefMessage[] msgs) { NdefRecord[][] records=null; if(msgs!=null){ records = new NdefRecord[msgs.length][]; for(int i=0; i<msgs.length; i++){ records[i]= new NdefRecord[msgs[i].getRecords().length]; records[i]= msgs[i].getRecords(); } } return records; } /** * Récupère la liste des NdefRecords contenus dans chaque NdefMessages */ public static NdefRecord[] getNdefRecords(NdefMessage ndef) { if(ndef!=null){ return ndef.getRecords(); } return null; } /** * Récupère la lise des NdefMessages contenus dans le tag */ public static NdefMessage[] getNdefMessages(Intent intent){ NdefMessage[] messages; // On récupère les objets Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { messages = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { // On cast les les objets en NdefMessage messages[i] = (NdefMessage) rawMsgs[i]; } } else { // Type du tag inconnu byte[] empty = new byte[] {}; // On crée un faux NdefMessage qui a contenu vide NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty); NdefMessage msg = new NdefMessage(new NdefRecord[] {record}); messages = new NdefMessage[] {msg}; } return messages; } public static NdefRecord createRecord(byte[] key) { char status = (char) (key.length); // data correspond au futur payload byte[] data = new byte[1 + key.length]; data[0] = (byte) status; System.arraycopy(key, 0, data, 1, key.length); return new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, "r0ly.fr:CryptoNFCKey".getBytes(), new byte[0], data); } }