Zum Inhalt springen
Sprache: DE

Welche Technologieklasse sollte Android-Code für einen Tag öffnen?

Die höchste Ebene, die die Aufgabe erfüllt. Ndef liest und schreibt Inhalt auf jedem Typ des NFC Forum, NdefFormatable bereitet einen leeren Tag vor, IsoDep trägt APDU, und NfcA oder NfcV senden rohe Befehle, wenn Inhalt nicht genügt. Prüfen Sie zuerst getTechList: drei Klassen sind optional.

Was getTechList meldet

Jeder erkannte Tag kommt mit einem Tag-Objekt, und dessen getTechList() benennt die Klassen, die Ihr Code darauf öffnen darf. Ein Tag meldet meist mehrere auf einmal: die Referenz zu MifareUltralight hält fest, dass NfcA in jedem Fall daneben aufgeführt wird, da jeder solche Tag auch ein NFC-A-Tag ist.

Die Technologieklassen, und ob ein Telefon sie bereitstellen muss
KlasseWas sie Ihrem Code gibtAuf jedem Telefon vorgeschrieben
NdefNDEF lesen und schreiben auf den NFC-Forum-Typen 1 bis 4Ja
NdefFormatableEinen leeren Tag formatieren und eine erste Nachricht schreibenNur für Tags, die das Telefon formatieren kann
NfcA, NfcB, NfcF, NfcVRohe Befehle auf der Funkebene der jeweiligen TechnologieJa
IsoDepAPDU über ISO/IEC 14443-4Ja
MifareClassicZugriff auf Sektoren nach Authentifizierung mit einem SchlüsselNein
MifareUltralightSeiten lesen und schreibenNein
NfcBarcodeTags, die nur einen Strichcode tragenNein

Die Liste steht beim Erkennen fest. Die Referenz zu TagTechnology teilt jede Klasse in gemerkte Abfragen, die den Tag beschreiben, wie er beim Eintritt ins Feld war, und nie aktualisiert werden, und in Ein- und Ausgabeoperationen, die mit dem Tag sprechen und blockieren können.

Die höchste Ebene, die genügt

Ndef verbirgt die Unterschiede zwischen den Tag-Typen: dieselben Aufrufe lesen und schreiben einen Aufkleber vom Typ 2 und eine Karte vom Typ 4. Code, der dagegen geschrieben ist, funktioniert weiter, wenn der Lieferant den Chip wechselt.

Die rohen Klassen nehmen diesen Schutz weg. NfcA.transceive() sendet Ihre Bytes unverändert, der Controller fügt nur die Prüfsumme hinzu, sodass Befehlssatz und Speicheraufteilung Ihr Problem werden, und beide unterscheiden sich von Chip zu Chip. Sie stehen im Datenblatt des jeweiligen Chips, das diese Seite wakdev.com überlässt.

IsoDep liegt dazwischen. Es trägt APDU zu Karten und zu Tags vom Typ 4, und die Referenz zu IsoDep sagt, dass es lange Austausche selbst zerlegt und wieder zusammensetzt, sodass Ihr Code ganze Befehle sendet.

NdefFormatable ist für einen einzigen Moment im Leben eines Tags da. Seine Referenz räumt ein, dass die Verfahren zum Formatieren eines Tags nicht vom NFC Forum festgelegt und nicht allgemein bekannt sind, weshalb die Klasse nur bei Tags erscheint, die ein bestimmtes Telefon zu formatieren weiß.

Eine Verbindung auf einmal

Ein Tag nimmt eine geöffnete Klasse auf einmal an. Die Referenz sagt das unmissverständlich, und ein zweites connect() scheitert mit IOException, sodass Code, der Ndef zum Lesen und danach NfcA zum Abfragen des Chips öffnet, das erste schließen muss, bevor er das zweite öffnet.

Jeder Aufruf, der die Funkschnittstelle berührt, blockiert und muss vom Hauptthread fernbleiben. close() ist der Ausweg aus einem blockierten Aufruf: aus einem anderen Thread abgesetzt, bricht es die laufende Operation mit IOException ab.

Ein Tag-Objekt hängt außerdem an einem einzigen Auftreten. Die Referenz zu Tag sagt, dass bei jedem Eintritt in die Reichweite ein neues Objekt entsteht, auch für denselben physischen Tag, und dass nur das jüngste eine Klasse öffnen kann. Ein älteres nach dem Verschwinden seines Tags zu benutzen, löst SecurityException aus.

Klassen, die ein Telefon nicht anbietet

Drei Klassen sind optional, und ihr Fehlen ist lautlos. Ein Telefon, das MifareClassic nicht umsetzt, führt es nie auf, sodass dieselbe Karte die Klasse auf einem Telefon meldet und auf einem anderen nicht, und Code, der sie voraussetzte, scheitert erst im Einsatz.

Ndef selbst ist nur auf den NFC-Forum-Typen 1 bis 4 zugesichert. Die Referenz zu Ndef behandelt herstellereigene Formate, NDEF auf MIFARE Classic eingeschlossen, als bestes Bemühen und empfiehlt aus diesem Grund die NFC-Forum-Typen für neue Einsätze.

Prüfen Sie also auf die Klasse, nicht auf das Telefonmodell. Die Liste, die der Tag in der Hand meldet, ist die einzige Antwort, die auch auf dem nächsten Telefon noch gilt.

Häufige Fragen

Kann ich Ndef und NfcA gleichzeitig auf demselben Tag öffnen?

Nein. Nur eine Klasse kann auf einmal mit einem Tag verbunden sein, also schließen Sie die erste, bevor Sie die zweite verbinden.

Warum fehlt NdefFormatable auf einem leeren Tag?

Das Telefon weiß nicht, wie es diesen Tag formatiert. Die Referenz sagt, dass die Klasse nur für Tags aufgeführt wird, die das Gerät formatieren kann, und dass kein Satz von Tags vorgeschrieben ist.

Warum zeigt getCachedNdefMessage nach dem Schreiben noch den alten Inhalt?

Sie gibt die Nachricht zurück, die beim Eintritt ins Feld gelesen wurde, und aktualisiert sie nie. Lesen Sie den aktuellen Inhalt mit getNdefMessage, die mit dem Tag spricht.

Sollte neuer Code MifareClassic benutzen?

Nur um vorhandene MIFARE-Classic-Karten zu lesen, und mit einem Rückfallweg für Telefone, denen die Klasse fehlt. Sie ist optional, und die Referenz zu Ndef empfiehlt für neue Einsätze die NFC-Forum-Typen.