Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

NFC-Tags mit Android lesen

by
Difficulty:IntermediateLength:LongLanguages:

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Sind Sie neugierig, was NFC ist und wie es in Ihre eigenen Android-Anwendungen integriert werden kann?  Dieses Tutorial führt Sie schnell in das Thema ein, bevor Sie tauchen und Ihnen beibringen, wie Sie eine einfache NFC-Reader-App erstellen können!


Was ist NFC?

NFC ist die Abkürzung für Near Field Communication.  Es ist der internationale Standard für den kontaktlosen Austausch von Daten.  Im Gegensatz zu vielen anderen Technologien wie Wireless LAN und Bluetooth beträgt der maximale Abstand zweier Geräte 10 cm.  Die Entwicklung des Standards begann 2002 bei NXP Semiconductors und Sony.  Das NFC Forum, ein Konsortium aus über 170 Unternehmen und Mitgliedern, darunter Mastercard, NXP, Nokia, Samsung, Intel und Google, entwickelt seit 2004 neue Spezifikationen.

Es gibt verschiedene Möglichkeiten für die NFC-Nutzung mit mobilen Geräten; zum Beispiel papierlose Tickets, Zugangskontrollen, bargeldlose Zahlungen und Autoschlüssel.  Mit Hilfe von NFC-Tags können Sie Ihr Telefon steuern und Einstellungen ändern.  Daten können einfach ausgetauscht werden, indem zwei Geräte nebeneinander gehalten werden.

In diesem Tutorial möchte ich erklären, wie NFC mit dem Android SDK implementiert wird, welche Fallstricke bestehen und was zu beachten ist.  Wir werden Schritt für Schritt eine App erstellen, die den Inhalt von NFC-Tags lesen kann, die NDEF unterstützen.


NFC-Technologien 

Es gibt eine Vielzahl von NFC-Tags, die mit einem Smartphone gelesen werden können.  Das Spektrum reicht von einfachen Stickern und Schlüsselringen bis hin zu komplexen Karten mit integrierter kryptografischer Hardware.  Tags unterscheiden sich auch in ihrer Chip-Technologie.  Das wichtigste ist NDEF, das von den meisten Tags unterstützt wird.  Darüber hinaus sollte Mifare erwähnt werden, da es sich hierbei um die am häufigsten verwendete kontaktlose Chiptechnologie weltweit handelt.  Einige Tags können gelesen und geschrieben werden, während andere schreibgeschützt oder verschlüsselt sind.

In diesem Lernprogramm wird nur das NFC- atenaustauschformat (NDEF) behandelt.

girogo-card

NFC-Unterstützung in einer App hinzufügen

Wir beginnen mit einem neuen Projekt und einer leeren Aktivität.  Es ist wichtig, eine SDK-Mindestversion von Level 10 auszuwählen, da NFC nur nach Android 2.3.3 unterstützt wird.  Denken Sie daran, Ihren eigenen Paketnamen zu wählen. Ich habe net.vrallev.android.nfc.demo gewählt, weil vrallev.net die Domäne meiner Website ist und der andere Teil sich auf das Thema dieser Anwendung bezieht.

Das von Eclipse generierte Standardlayout ist für uns fast ausreichend. Ich habe der TextView nur eine ID hinzugefügt und den Text geändert. 

Um Zugriff auf die NFC-Hardware zu erhalten, müssen Sie im Manifest eine Berechtigung beantragen.  Wenn die App ohne NFC nicht funktioniert, können Sie die Bedingung mit dem Tag uses-feature angeben.  Wenn NFC erforderlich ist, kann die App nicht auf Geräten ohne diese App installiert werden. Google Play zeigt Ihre App nur für Nutzer an, die Inhaber eines NFC-Geräts sind.

Die MainActivity sollte nur aus der onCreate () -Methode bestehen.  Sie können über die NfcAdapter-Klasse mit der Hardware interagieren.  Es ist wichtig herauszufinden, ob der NfcAdapter null ist.  In diesem Fall unterstützt das Android-Gerät NFC nicht. 

Wenn wir jetzt unsere App starten, können wir den Text sehen, ob NFC aktiviert oder deaktiviert ist.

So filtern Sie nach NFC-Tags

Wir haben unsere Beispielanwendung und möchten eine Benachrichtigung vom System erhalten, wenn wir ein NFC-Tag an das Gerät anhängen.  Wie üblich verwendet Android sein Intent-System, um Tags an die Apps zu liefern.  Wenn mehrere Apps mit der Absicht umgehen können, wird der Aktivitätswähler angezeigt und der Benutzer kann entscheiden, welche App geöffnet werden soll.  Das Öffnen von URLs oder das Freigeben von Informationen erfolgt auf die gleiche Weise.


NFC-Intent-Filter 

Es gibt drei verschiedene Filter für Tags:

  1. ACTION_NDEF_DISCOVERED 
  2. ACTION_TECH_DISCOVERED 
  3. ACTION_TAG_DISCOVERED 

Die Liste wird von der höchsten zur niedrigsten Priorität sortiert.

Was passiert nun, wenn ein Tag an das Smartphone angehängt ist?  Wenn das System ein Tag mit NDEF-Unterstützung erkennt, wird eine Absicht ausgelöst.  Eine ACTION_TECH_DISCOVERED-Absicht wird ausgelöst, wenn keine Aktivität von einer App für die NDEF-Intent registriert ist oder wenn das Tag keine NDEF unterstützt.  Wenn wieder keine App für den Intent gefunden wird oder die Chiptechnologie nicht erkannt wurde, wird eine ACTION_TAG_DISCOVERED Intent ausgelöst.  Die folgende Grafik zeigt den Ablauf:

nfc tag dispatch

Zusammenfassend bedeutet dies, dass jede App nach der Absicht mit der höchsten Priorität filtern muss.  In unserem Fall ist dies die NDEF-Absicht.  Wir implementieren zuerst die ACTION_TECH_DISCOVERED Intent, um den Unterschied zwischen den Prioritäten hervorzuheben.


Tech Entdeckte Absicht

Wir müssen die Technologie angeben, an der wir interessiert sind.  Zu diesem Zweck erstellen wir im Ordner res einen Unterordner namens xml.  In diesem Ordner erstellen wir die Datei nfc_tech_filter.xml, in der wir die Technologien angeben.

Jetzt müssen wir einen IntentFilter im Manifest erstellen, und die App wird gestartet, wenn wir einen Tag anhängen. 

Wenn keine andere App für diese Absicht registriert ist, beginnt unsere Aktivität sofort.  Auf meinem Gerät sind jedoch andere Apps installiert, sodass der Aktivitätswähler angezeigt wird.

screenshot

NDEF entdeckt Absicht

Wie bereits erwähnt, hat der Tech Discovered Intent die zweithöchste Priorität.  Da unsere App jedoch nur NDEF unterstützt, können wir stattdessen den NDEF Discovered Intent verwenden, der eine höhere Priorität hat.  Wir können die Technologieliste wieder löschen und den IntentFilter durch den folgenden ersetzen. 

Wenn wir das Tag jetzt anhängen, wird die App wie zuvor gestartet.  Es gibt jedoch einen Unterschied für mich.  Der Aktivitätswähler erscheint nicht und die App startet sofort, da der NDEF-Intent eine höhere Priorität hat und die anderen Apps nur für die niedrigeren Prioritäten registriert sind.  Genau das wollen wir.


Vordergrund Versand 

Beachten Sie, dass ein Problem bleibt.  Wenn unsere App bereits geöffnet ist und wir das Tag erneut anhängen, wird die App ein zweites Mal geöffnet, anstatt das Tag direkt zu übermitteln.  Dies ist nicht unser beabsichtigtes Verhalten.  Sie können das Problem umgehen, indem Sie einen Foreground-Versand verwenden.

 Anstatt dass das System den Intent verteilt hat, können Sie Ihre Aktivität registrieren, um das Tag direkt zu erhalten.  Dies ist wichtig für einen bestimmten Workflow, bei dem es keinen Sinn macht, eine andere App zu öffnen. 

Ich habe die Erklärungen an den entsprechenden Stellen im Code eingefügt.

Wenn Sie jetzt ein Tag anhängen und unsere App bereits geöffnet ist, wird onNewIntent aufgerufen, und es wird keine neue Aktivität erstellt.


Daten von einem NDEF-Tag lesen

Der letzte Schritt besteht darin, die Daten vom Tag zu lesen.  Die Erklärungen werden an den entsprechenden Stellen im Code noch einmal eingefügt.  Die NdefReaderTask ist eine private innere Klasse.

Die App liest nun erfolgreich den Inhalt.   

screen

Nützliche Apps 

Um zu prüfen, ob Daten korrekt gelesen und geschrieben werden, verwende ich gerne folgende Apps:

  • NFC TagInfo von NFC Research Lab zum Lesen von Daten 
  • TagInfo von NXP SEMICONDUCTORS zum Lesen von Daten 
  • TagWriter von NXP SEMICONDUCTORS zum Schreiben von Daten

Fazit

In diesem Tutorial habe ich Ihnen gezeigt, wie die Daten eines NDEF-Tags extrahiert werden können.  Sie könnten das Beispiel auf andere Mime-Typen und Chip-Technologien erweitern; eine Funktion zum Schreiben von Daten wäre ebenfalls nützlich.  Der erste Schritt zur Arbeit mit NFC wurde gemacht.  Das Android SDK bietet jedoch viel mehr Möglichkeiten, wie beispielsweise einen einfachen Austausch von Daten (Android Beam genannt). 


Über den Autor

Ralf Wondratschek ist Informatikstudent aus Deutschland.  Neben seinen Studien arbeitet Ralf als Freelancer im Bereich Mobile Computing. In den letzten Jahren hat er mit Java, XML, HTML, JSP, JSF, Eclipse, Google App Engine und natürlich Android gearbeitet.  Er hat bisher zwei Android-Apps veröffentlicht, die hier zu finden sind

Auf seiner Homepage vrallev.net können Sie mehr über die Arbeit des Autors erfahren. 


Quellen

http://www.nfc-forum.org/home/n-mark.jpg

http://commons.wikimedia.org/wiki/File%3A%C3%9Cberlagert.jpg

http://developer.android.com/images/nfc_tag_dispatch.png


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.