Vai al contenuto
Lingua: IT

Quale classe di tecnologia deve aprire il codice Android per un dato tag?

Il livello più alto che fa il lavoro. Ndef legge e scrive contenuto su qualsiasi tipo del NFC Forum, NdefFormatable prepara un tag vergine, IsoDep porta le APDU, e NfcA o NfcV inviano comandi grezzi quando il contenuto non basta. Guarda prima getTechList: tre classi sono facoltative e su certi telefoni non compaiono mai.

Quello che getTechList dichiara

Ogni tag rilevato arriva con un oggetto Tag, e il suo getTechList() nomina le classi che il tuo codice può aprirci sopra. Un tag ne dichiara di solito diverse insieme: il riferimento di MifareUltralight nota che NfcA viene enumerata accanto a essa in ogni caso, dato che ognuno di quei tag è anche un tag NFC-A.

Le classi di tecnologia, e se un telefono deve fornirle
ClasseChe cosa dà al tuo codiceNecessaria su ogni telefono
NdefLettura e scrittura NDEF sui tipi del NFC Forum da 1 a 4Sì
NdefFormatableFormattare un tag vergine e scrivere un primo messaggioSolo per i tag che il telefono sa formattare
NfcA, NfcB, NfcF, NfcVComandi grezzi al livello radio di ciascuna tecnologiaSì
IsoDepAPDU su ISO/IEC 14443-4Sì
MifareClassicAccesso ai settori dopo l'autenticazione con chiaveNo
MifareUltralightLetture e scritture di paginaNo
NfcBarcodeTag che portano solo un codice a barreNo

L'elenco è fissato al rilevamento. Il riferimento di TagTechnology divide ogni classe in metodi di lettura conservati, che descrivono il tag com'era quando è entrato nel campo e non si aggiornano mai, e operazioni di ingresso e uscita, che parlano al tag e possono bloccarsi.

Il livello più alto che fa il lavoro

Ndef nasconde le differenze fra i tipi di tag: le stesse chiamate leggono e scrivono un adesivo di tipo 2 e una scheda di tipo 4. Il codice scritto su di essa continua a funzionare quando il fornitore cambia chip.

Le classi grezze tolgono quella protezione. NfcA.transceive() invia i tuoi byte così come sono, e il controller aggiunge solo il CRC, quindi l'insieme dei comandi e la mappa di memoria diventano un tuo problema, e cambiano tutti e due da un chip all'altro. Sono definiti nella scheda tecnica di ciascun chip, che questo sito lascia a wakdev.com.

IsoDep sta fra le due. Porta le APDU alle schede e ai tag di tipo 4, e il riferimento di IsoDep dice che spezza e ricompone da sé gli scambi lunghi, quindi il tuo codice invia comandi interi.

NdefFormatable serve per un momento solo nella vita di un tag. Il suo riferimento ammette che le procedure per formattare un tag non sono specificate dal NFC Forum e non sono generalmente note, ed è per questo che la classe compare solo sui tag che un dato telefono sa formattare.

Una connessione alla volta

Un tag accetta una classe aperta alla volta. Il riferimento lo dice chiaro, e una seconda connect() fallisce con IOException, quindi il codice che apre Ndef per leggere e poi NfcA per interrogare il chip deve chiudere la prima prima di aprire la seconda.

Ogni chiamata che tocca la radio si blocca e deve stare fuori dal thread principale. close() è la via d'uscita da una chiamata bloccata: fatta da un altro thread, annulla l'operazione in corso con IOException.

Anche un oggetto Tag è legato a una sola comparsa. Il riferimento di Tag dice che un nuovo oggetto viene creato ogni volta che il tag entra a portata, anche per lo stesso tag fisico, e che solo il più recente può aprire una classe. Usarne uno vecchio dopo che il suo tag se n'è andato solleva SecurityException.

Classi che un telefono può non offrire

Tre classi sono facoltative, e la loro assenza è silenziosa. Un telefono che non realizza MifareClassic non la elenca mai, quindi la stessa scheda dichiara la classe su un telefono e non su un altro, e il codice che l'ha data per scontata fallisce solo sul campo.

Ndef stessa è garantita solo sui tipi del NFC Forum da 1 a 4. Il riferimento di Ndef tratta i formati dei costruttori, NDEF conservato su MIFARE Classic compreso, come un impegno senza garanzia, e per questa ragione raccomanda i tipi del NFC Forum per le installazioni nuove.

Quindi prova la classe, non il modello di telefono. L'elenco dichiarato dal tag che hai in mano è l'unica risposta che vale ancora sul telefono successivo.

Domande frequenti

Posso aprire Ndef e NfcA sullo stesso tag insieme?

No. Solo una classe alla volta può essere connessa a un tag, quindi chiudi la prima prima di connettere la seconda.

Perché NdefFormatable manca su un tag vergine?

Il telefono non sa formattare quel tag. Il riferimento dice che la classe viene enumerata solo per i tag che il dispositivo sa formattare, e che nessun insieme di tag è obbligatorio.

Perché getCachedNdefMessage mostra ancora il vecchio contenuto dopo una scrittura?

Rende il messaggio letto quando il tag è entrato nel campo e non si aggiorna mai. Leggi il contenuto attuale con getNdefMessage, che parla al tag.

Il codice nuovo dovrebbe usare MifareClassic?

Solo per leggere schede MIFARE Classic esistenti, e con un ripiego per i telefoni a cui manca. La classe è facoltativa, e il riferimento di Ndef raccomanda i tipi del NFC Forum per le installazioni nuove.