German NFC in eigener App

hogiebaer

Active Member
Licensed User
Longtime User
Hallo ihr B4A Götter,

stehe vor einem Problem. Muss NFC Karten lesen in der bereits vorhandenen App (Buchungssystem).
Über externe NFC Reader Apps habe ich auch schon sichergestellt, dass die vorhandenen Karten
lesbar sind für das Android System (Mirfare Classic). Habe nun einmal mit der NFC Lib herumhantiert und
mir auch schon einmal ein Testprogramm dazu aus dem Forum angeschaut. Diese basieren aber wohl
nach meinem Verständnis her darauf, dass über die Activity_Resume der Readvorgang aktiviert wird.
Schlecht für mich, da ja die App grundsätzlich läuft und nicht nocheinmal gestartet werden soll.
Gibt es eine Möglichkeit, wie bei WLAN etc, eine Eventroutine zu definieren, die auslöst, wenn
der NFC Reader etwas gelesen hat ??

Vielen Dank im vorraus

Gruss
Holger
 

DonManfred

Expert
Licensed User
Longtime User
Ich weiss nicht, ob ICH der richtige bin um das erklären zu können. Dazu habe ich mit NFC zu wenig Erfahrung.
Aber auch ich habe - oder bin gerade dabei - mir Gedanken gemacht wie NFC uns (der Firma) "behiflich" sein kann.
Mein aktueller Ansatz folgt weiter unten.

GRUNDSÄTZLICH muss man NFC schon als Event-driven ansehen....
- Der Benutzer scannt einen NFC-Tag und das System (android) versucht dem BefehlInhalt zu folgen. Es gibt sicherlich gewissen Standards wie eine URL.

Also; wird ein Tag gescannt wird eine App von Android gestartet die vorher angegeben hat, dass sie z.B. für eine ganz bestimmte "URL" zuständig sind.

Man kann seine aktuelle app während der Laufzeit auch in einen "Vordergrund-Modus" bringen und damit erreichen daß jeglicher gescannte NFC-Tag erstmal in der eigenen App ankommt.
Siehe ein Beispiel im Anhang: grundprogramm.zip

in diesem Beispiel wird, wenn die URL z.B. "beka://service/1234" lautet, das ganze an ein anderes Modul weiter gereicht. Also unterm Strich wird eine andere App gestartet mit dieser URL als Parameter.

Das zweite Beispiel ist eine solche App (serviceapp.zip). Diese meldet sich bei Android mittels eines Eintrages im Manifest an, um Android mitzuteilen, das die App für die folgenden URLs zuständig ist: beginnt eine URL so, dann wird android beim Scannen eins Tags diese App starten:

- beka://kunden/
- beka://service/
- beka://ab/

erreicht wird das durch den folgenden Eintrag im Manifest

AddActivityText(Main,
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "beka://service” -->
<data android:scheme="beka" android:host="service" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "beka://kunden” -->
<data android:scheme="beka" android:host="kunden" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "beka://ab” -->
<data android:scheme="beka" android:host="ab" />
</intent-filter>
)

Grundsätzlich kann man auch ohne vorgeschaltetem "grundprogramm" arbeiten. Dann muss android aber die entscheidung abnehmen, welche App da gestartet wird. Es könnten mehrere pps sein die sich für etwas anmelden.

Is serviceapp also erstmal installiert und einmal gestartet worden, so sind die neuen URLs Android bekannt....

Scannt man nun (ohne laufendes Grundprogramm) einen Tag mit einer solchen URL dann startet Android sofort die Serviceapp. Zumindest ist das bei mir hier so. Keine Ahnung ob das so gewollt ist. Aber ich denke schon das man sich auf dieses Verhalten irgendwie verlassen kann/muss/sollte

Ziel meines rumspielens war/ist halt, das auf einem Tag z.B. die URL beka://service/2156 drauf ist. Scannt man diesen nun ein dann wird die Serviceapp gestartet und in einer listview werden die einzelnen "Parameter" angezeigt. Welche wierum die grundlage für die weitere Vorgehensweise der Serviceapp dienen soll... In obiger url soll halt ein Service mit der ID 2156 angezeigt werden....

Wie anfangs schon erwähnt bin ich ein noob was NFC betrifft. Verlasse Dich also nicht so sehr auf hier gemachte Angaben :D

Ich kann Dir nur meine persönlichen Erfahrungen/Ideen darlegen in der Hoffnung, das sie Dir vielleicht helfen mögen ;-)
 

Attachments

  • grundprogramm.zip
    8.6 KB · Views: 418
  • serviceapp.zip
    7.6 KB · Views: 405

hogiebaer

Active Member
Licensed User
Longtime User
Vielen lieben Dank DonManfred für deine Ausführungen.

Grundsätzlich ist es so, dass es hier nichts mit Links zu tun hat, sondern um IdentKarten der Mitarbeiter, die halt einen Code aussenden bei
Kontakt, den ich auslesen möchte. Habe auch schon mit dem "Intent-Gedönse" mir mal etwas durchgelesen. Was ich benötige, ist eingentlich relativ einfach. Nur einen Event im eigenen Programm ausgelöst zu bekommen, wo ich dann diesen Intent-Stack auslesen kann. Eigentlich ganz einfach, aber wenn die Basics fehlen, umheimlich schwer ;)

Gruss
Holger
 
Top