Um NFC zu verstehen, müssen Sie das NFC Data Exchange Format (NDEF) kennen – die Lingua Franca für NFC-Devices und Tags. In diesem Kapitel werden Sie die Struktur von NDEF und die darin enthaltenen Datensätze kennenlernen. Zudem werden Sie ein paar Apps schreiben, die NDEF-formatierte Nachrichten lesen und schreiben.
Mit dieser ersten Methode informieren Sie Android lediglich darüber, welche App zu starten ist.
Bei der zweite Methode wird auch nur ein NDEF-Datensatz genutzt, bei dem das TNF auf »Well-Known« steht und der Datensatz-Typ ein »U« für URI enthält. Auch in diesem Fall ist der Inhalt die eigentliche Adresse. Hier wieder ein Beispiel:
TNF : Well-Known Record Type : U http : //m . foursquare . com/venue/4a917563f964a520401a20e3
Mit der zweiten Methode teilen Sie Android die URI des Objekts mit, das Sie öffnen möchten, und lassen das Betriebssystem entscheiden, welche Anwendung dafür die beste Wahl ist. Das ist ein wenig so wie unter Windows, wo das Betriebssystem entscheidet, welche Anwendung eine Datei mit einer bestimmten Erweiterung öffnet. Wäre Foursquare nicht auf Ihrem Device vorhanden, hätte sich Google Play um diese URLs gekümmert.
Bei der dritten Methode wird eine NDEF-Nachricht genutzt, die aus zwei NDEF-Datensätzen besteht. Sowohl beim NFC Task Launcher als auch bei den Samsung TecTiles kümmert sich die eigentliche App um das Lesen des Tags und das Starten von Foursquare. NFC Task Launcher nutzt einen MIME-Type-Datensatz, der die Foursquare Venue-Information sowie einen External AAR-Datensatz enthält, mit dem sichergestellt wird, dass die Anwendung installiert ist. TecTiles verfolgt einen ähnlichen Ansatz mit einer anderen Implementierung. Hier wird ein URI-Datensatz mit einer speziellen tectile://-URL verwendet, um die Anwendung zu starten. Die Foursquare-Information wird dabei in einem zweiten Text-Datensatz verpackt. Leider startet TecTiles nur die Anwendung, ohne die Venue-Information mitzugeben. Bei beiden Applikationen kommen Intent-Filter zum Einsatz, falls sie gestartet werden sollen, wenn ihr Tag gescannt wird. NFC Task Launcher registriert sich auf den MIME-Typ x/nfctl
, TecTiles auf ihre spezielle tectile://-URI. Mehr zu Intent-Filtern erfahren Sie in „Das Tag Dispatch System von Android“.
Bei der vierte Methode kommt ein Smart Poster-Datensatz zum Einsatz. Dabei handelt es sich um einen komplexeren NDEF-Datensatz, bei dem die Payload letztendlich wieder eine weitere NDEF-Nachricht ist. Die in die Smart Poster Payload eingebettete Nachricht besteht aus zwei NDEF-Datensätzen – einer URI und einem Text-Datensatz. Da Smart Poster-Datensätze mehrere Datensätze enthalten, können sie weitere Informationen zur URI enthalten – zum Beispiel einen Titel, ein Symbol oder Aktions-Vorschläge.
Manche der Anwendungen, wie zum Beispiel TecTiles und NFC Task Launcher, schreiben Android Application Records, um statt Foursquare ihre eigene App zu starten, die dann wiederum Foursquare startet. Damit können sie vermutlich protokollieren, wann ihre App im Einsatz ist, selbst wenn im Endeffekt eine andere App gestartet wird. Das ist komplizierter, ermöglicht aber das Erstellen von Statistiken für den Einsatz Ihrer App.
$
cd
~/FoursquareCheck in
$
cor va plat m add android
$
cor va plug in add https : //github . com/ char iotsolutions/phonegap-nfc
Windows-Anwender sollten statt ~/FoursquareCheckin
das Verzeichnis %userprofile%\FoursquareCheckin
nutzen.
Windows-Anwender sollten statt ~/FoursquareCheckin
den Wert /d %userprofile%\FoursquareCheckin
nutzen.
Jetzt können Sie Ihre App schreiben, indem Sie die HTML- und JavaScript-Dateien bearbeiten. Die Datei index.html findet sich im Verzeichnis www des App-Ordners, während index.js in www/js abgelegt ist. Öffnen Sie beide und löschen Sie sämtlichen Inhalt, um Ihre eigene App von Grund auf selbst zu schreiben. Beginnen Sie mit index.html und tragen Sie Folgendes ein:
<!DOCTYPE html>
<html>
<head>
<title>
Foursquare Check-In Tag Writer
</title>
<style>body
</style>
</head>
<body>
<p>
Foursquare Check-In Tag Writer
</p>
<div
>
<div
>
Ke in Tag gefunden
</div>
</div>
<script
></script>
<script
></script>
<script
>
app
itialize
</script>
...