Sì! Stai prendendo il giusto approccio.
Per effettuare Delphi e FireMonkey lavoro è possibile utilizzare il seguente template in quanto è il modo giusto per ottenere quello che avete in mente:
Interfaccia:
/ JNI NFC import demo
// Note - REQUIRES - PROJECT OPTIONS - USES PERMISSIONS - NFC
interface
uses
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
FMX.Helpers.Android,
SysUtils,
Classes;
type
NFC Adattatore:
/////////////////////////// NfcAdapter /////////////////////////////////
JNfcManager = interface;
JNfcAdapter = interface;
JNfcAdapterClass = interface(JObjectClass)
['{634258AC-7931-4E38-97E6-48DBF688A288}']
{Property methods}
function _ACTION_TAG_DISCOVERED: JString; cdecl;
function _EXTRA_ID: JString; cdecl;
function _EXTRA_NDEF_MESSAGES: JString; cdecl;
function _EXTRA_TAG: JString; cdecl;
{Properties}
property ACTION_TAG_DISCOVERED: JString read _ACTION_TAG_DISCOVERED;
property EXTRA_ID: JString read _EXTRA_ID;
property EXTRA_NDEF_MESSAGES: JString read _EXTRA_NDEF_MESSAGES;
property EXTRA_TAG: JString read _EXTRA_TAG;
end;
[JavaSignature('android/nfc/NfcAdapter')]
JNfcAdapter = interface(JObject)
['{364D8F3F-23AE-4C28-A261-E30C0893B24C}']
//Return true if this NFC Adapter has any features enabled
function isEnabled: Boolean; cdecl;
end;
TJNfcAdapter = class(TJavaGenericImport<JNfcAdapterClass, JNfcAdapter>) end;
NfcManager:
/////////////////////////// NfcManager /////////////////////////////////
JNfcManagerClass = interface(JObjectClass)
['{812481E1-F491-47D2-AC1F-4C5AB509532B}']
end;
[JavaSignature('android/nfc/NfcManager')]
JNfcManager = interface(JObject)
['{04B707EC-966A-4E4F-85DC-F003B7C9ACE3}']
{Methods}
function getDefaultAdapter: JNfcAdapter; cdecl;
end;
TJNfcManager = class(TJavaGenericImport<JNfcManagerClass, JNfcManager>) end;
function HasNfc: Boolean;
function IsNfcEnabled: Boolean;
implementation
function GetNfcManager: JNfcManager;
var
ConnectivityServiceNative: JObject;
begin
ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.NFC_SERVICE);
if not Assigned(ConnectivityServiceNative) then
raise Exception.Create('Could not locate Nfc Service');
Result := TJNfcManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
if not Assigned(Result) then
raise Exception.Create('Could not access Nfc Manager');
end;
function HasNfc: Boolean;
var
NfcManager: JNfcManager;
NfcAdapter: JNfcAdapter;
begin
NfcManager := GetNfcManager;
NfcAdapter := NfcManager.getDefaultAdapter;
Result := Assigned(NfcAdapter);
end;
function IsNfcEnabled: Boolean;
var
NfcManager: JNfcManager;
NfcAdapter: JNfcAdapter;
begin
NfcManager := GetNfcManager;
NfcAdapter := NfcManager.getDefaultAdapter;
Result := Assigned(NfcAdapter)and NfcAdapter.isEnabled;
end;
end.
{code}
usage
Memo1.Lines.Add('Nfc Enabled: '+BoolToStr(IsNfcEnabled, True));
Nel caso in cui si gioca in giro con questo codice di esempio, sono abbastanza sicuro che funzionerà!
Immagino che tu sia costretto a ottenere il meglio da tutto, ad esempio utilizzando un'API totalmente cross e multi-piattaforma, che ti permetterà di avere esattamente lo stesso codice in esecuzione su Android and iOS senza alcuna modifica del fronte della tua app e back-end. Sì, è vero che alcuni strumenti sono attualmente in fase di sviluppo per il targeting per la vera piattaforma multi-piattaforma integrata development, che dovrebbe raggiungere la piena integrazione probabilmente nel prossimo futuro. Sfortunatamente, la realtà è che nelle attuali fasi di sviluppo di piattaforme mobili, è possibile utilizzare tali strumenti multipiattaforma solo se si implementano app di base che non dipenderanno da risorse più specifiche, come NFC, Geofencing, ecc. Naturalmente, se non sei in un ambiente di produzione, alla fine potresti avere tutto il tempo per giocare e divertirti. Ma supponendo che non sia il caso, quindi mantenere l'attenzione sul mettere insieme le cose per funzionare velocemente, come termine di consegna è solitamente stretto.
Detto questo, in alternativa il modo più veloce e più breve per ottenere la comunicazione NFC-tag è semplicemente farlo con la risorsa API NFC di Android, come è stato introdotto dal livello API 9 - Android Gingerbread.
trasferimenti NFC possono verificarsi tra due dispositivi abilitati NFC, o tra un dispositivo e un “tag” NFC. I tag possono variare da tag passivi che trasmettono un URL quando vengono scansionati a sistemi complessi come quelli utilizzati nelle soluzioni di pagamento NFC, come ad esempio Google Wallet.
Per leggere, scrivere o trasmettere messaggi NFC, l'applicazione richiede l'NFC permesso di manifestare:
<uses-permission android:name=”android.permission.NFC” />
Quando un dispositivo Android è utilizzato per eseguire la scansione di un tag NFC, il sistema decodificherà il carico utile in entrata utilizzando il proprio sistema di invio tag, che analizza il tag, classifica i dati e utilizza un'intenzione per avviare un'applicazione per ricevere i dati.
Ecco un codice un'istantanea che mostra come registrare un'attività che risponderà solo alle NFC tags:
<activity android:name=”.BlogViewer”>
<intent-filter>
<action android:name=”android.nfc.action.NDEF_DISCOVERED”/>
<category android:name=”android.intent.category.DEFAULT”/>
<data android:scheme=”http”android:host=”blog.example.com”/>
</intent-filter>
</activity>
L'extra NfcAdapter.EXTRA_TAG include un oggetto Tag grezzo che rappresenta il tag digitalizzata. I NfcAdapter.EXTRA_TNDEF_MESSAGES contiene in più una serie di NDEF Messaggi:
String action = getIntent().getAction();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Parcelable[] messages =
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
for (int i = 0; i < messages.length; i++) {
NdefMessage message = (NdefMessage)messages[i];
NdefRecord[] records = message.getRecords();
for (int j = 0; j < records.length; j++) {
NdefRecord record = records[j];
// TODO Process the individual records.
}
}
}
Le potenzialità e le possibilità di NFC applications è enorme, e la domanda di tale tecnologia tende a crescere in modo significativo:
Se è possibile utilizzare lo smartphone come metodo di pagamento, pagare per cose come il trasporto pubblico e i parchimetri potrebbe essere semplice come swipin g sul tuo telefono. Puoi persino toccare un terminale di giornale sul tuo tragitto giornaliero per scaricare l'ultimo numero sul tuo dispositivo.
Se sei ancora bloccato su questo, @deterministicFail, ho scritto come leggere e scrivere tag NFC nelle app Delphi per Android per XE5, XE6 e XE7. Puoi trovare il post con i collegamenti a tutti e tre gli articoli qui: http://blog.blong.com/2014/09/delphi-and-nfc-on-android.html Divertiti! – blong