Inizia con NFC Android

Autore: John Stephens
Data Della Creazione: 23 Gennaio 2021
Data Di Aggiornamento: 19 Maggio 2024
Anonim
[GUIDA] Come programmare un chip NFC
Video: [GUIDA] Come programmare un chip NFC

Contenuto

  • Conoscenza necessaria: Android intermedio
  • Richiede: Telefono Android abilitato per NFC
  • Tempo del progetto: 30 minuti
  • File di supporto

L'NFC in NFC Android sta per "Near Field Communication", una tecnologia che consente la comunicazione dati wireless ravvicinata tra cose come telefoni, adesivi e carte. Se hai familiarità con Barclays PayWave o Oyster Card, saprai che la tecnologia su cui si basa, "RFID", consente di leggere i dati semplicemente toccando le cose insieme.

Potresti toccare un telefono contro adesivi, poster e con NFC, altri telefoni. Questa azione può essere utilizzata per avviare un sito Web o un'app, effettuare un pagamento o addirittura trasferire dati in entrambe le direzioni (su Android quest'ultima si chiama Fascio). Rispetto ai codici QR, NFC Android fornisce un meccanismo molto più semplice (e integrato) per aprire URL, scaricare app o persino leggere e scrivere contenuti personalizzati.

  • Leggi tutti i nostri articoli sulla progettazione di app qui

Cosa imparerai

In questo tutorial creeremo un'app che scrive su tag Android NFC e legge anche dati simili a Top Trumps per un gioco per console retrò. Se un utente senza la nostra app tocca il tag, utilizzerà un meccanismo integrato per portarlo alla pagina di download dell'app nel Play Store di Android. Una volta installato, qualsiasi tocco successivo avvierà l'app e mostrerà la scheda di gioco sullo schermo. Tutto in meno di 200 righe di codice!


Per proseguire avrai bisogno di un telefono Android abilitato NFC come il Samsung Galaxy Nexus o Samsung Nexus S. L'altra cosa di cui avrai bisogno sono alcuni tag o adesivi NFC. Puoi trovare questi molti posti online, ma RapidNFC offre un ottimo pacchetto iniziale, che include una varietà di tag riscrivibili e il sito web include anche una buona quantità di informazioni sui diversi tipi di tag. Assicurati di ordinarli preformattati (questo appare come un'opzione dopo payment), un bug in Android 4.0.2 potrebbe impedire la codifica di tag completamente vuoti.

Preparativi

Prima di iniziare a scrivere il nostro codice, consiglio anche di scaricare NXP TagWriter per familiarizzare con la lettura e la scrittura dei tag.

Oltre a leggere e scrivere testo e URL, puoi abilitare gratuitamente la "modalità professionale" nella schermata delle preferenze dell'app (accessibile tramite il pulsante del menu). Una volta abilitato, questo ti dà la possibilità di formattare / cancellare e proteggere i tag da scrittura.

01. Iniziare

Ora sulla nostra app ... Il primo lavoro è scrivere alcuni dati su un tag vuoto. Includeremo un record speciale che collega alla pagina di download dell'app e i dati di gioco stessi in NDEF (NFC Data Exchange Format).


Ti consiglio di aprire il codice sorgente a questo punto, poiché evidenzierò le parti chiave in questa pagina. Quando hai importato il progetto, apri AndroidManifest.xml nella visualizzazione XML.

Prima di poter utilizzare NFC Android, dobbiamo aggiungere alcuni nuovi tag al nostro manifest XML:

utilizza il permesso android: name = "android.permission.NFC" />
utilizza la funzione android: name = "android.hardware.nfc" android: required = "true" />

attività android: name = ". CardActivity"
>
intent-filter>
azione android: name = "android.nfc.action.NDEF_DISCOVERED" />
dati android: mimeType = "application / vnd.netmagazine.nfcdemo" />
categoria android: name = "android.intent.category.DEFAULT" />
/ intent-filter>
/ attività>


Il usi-permesso il tag ci consentirà di accedere al chip NFC nel telefono e al utilizza-hardware Il tag lo renderà un requisito, il che significa che la nostra app viene visualizzata solo sui telefoni abilitati NFC nel Play Store. Per noi CardActivity aggiungiamo un nuovo tag filtro di intenti, questo avvierà l'attività quando viene scansionato un tag che contiene dati nel nostro formato di gioco. Lo facciamo specificando un'abitudine tipo mimo, in questo caso ho scelto "application / vnd.netmagazine.nfcdemo". Android gestisce le scansioni dei tag NFC cercando di trovare la migliore corrispondenza per i dati sul tag, fornendo diversi meccanismi di fallback per assicurarsi che il tag sia gestito dall'app giusta e consentendo all'utente di scegliere da una finestra di dialogo di scelta quando non c'è un obiettivo chiaro .


La prima cosa che dobbiamo fare è scrivere alcuni dati su un tag NFC vuoto, quindi aprilo MainActivity.java. Questa attività viene avviata quando l'utente fa clic sull'icona dell'app. Visualizza un pulsante che, se premuto, attende la scrittura di un tag.


Nel nostro onCreate () prendiamo un riferimento all'adattatore NFC per un uso successivo:

mAdapter = NfcAdapter.getDefaultAdapter (questo);

Il NfcAdapter ci consente di iniziare ad ascoltare i tag che vengono scansionati, prima che qualsiasi altra app abbia la possibilità. Questo è chiamato "invio in primo piano". Quando l'utente preme il pulsante chiamiamo enableWriteMode () per iniziare questo processo:

private void enableWriteMode () {
mInWriteMode = true;
PendingIntent pendingIntent = PendingIntent.getActivity (this, 0,
new Intent (this, getClass ()). addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

IntentFilter tagDetected = new IntentFilter (NfcAdapter.ACTION_TAG_DISCOVERED);
Filtri IntentFilter [] = new IntentFilter [] {tagDetected};

mAdapter.enableForegroundDispatch (this, pendingIntent, filters, null);
}

In questo metodo impostiamo un file PendingIntent da eseguire quando un tag viene scansionato, in questo caso vogliamo semplicemente il file Intento per avviare l'attività corrente quando viene eseguita la scansione di un tag, quindi non impostare filtri speciali. Quando il sistema invia ACTION_TAG_DISCOVERED, questa attività verrà avviata e onNewIntent () verrà chiamato con i dettagli del tag.


public void onNewIntent (Intent intent) {
if (mInWriteMode) {
mInWriteMode = false;

Tag tag = intent.getParcelableExtra (NfcAdapter.EXTRA_TAG);
writeTag (tag);
}
}

Nel onNewIntent () estraiamo il tag NFC e iniziamo a scriverlo in formato writeTag (). Questo è di gran lunga il metodo più grande nella nostra demo:

private boolean writeTag (Tag tag) {
// registra per avviare Play Store se l'app non è installata
NdefRecord appRecord = NdefRecord.createApplicationRecord ("com.netmagazine.nfcdemo");

// record che contiene i dati di gioco della nostra "console retrò" personalizzata, utilizzando MIME_TYPE personalizzato
byte [] payload = getRandomConsole (). getBytes ();
byte [] mimeBytes = MimeType.NFC_DEMO.getBytes (Charset.forName ("US-ASCII"));
NdefRecord cardRecord = nuovo NdefRecord (NdefRecord.TNF_MIME_MEDIA, mimeBytes, nuovo byte [0], payload);
NdefMessage message = new NdefMessage (new NdefRecord [] {cardRecord, appRecord});

provare {
// controlla se il tag è già formattato NDEF
Ndef ndef = Ndef.get (tag);
if (ndef! = null) {
ndef.connect ();

if (! ndef.isWritable ()) {
displayMessage ("Tag di sola lettura.");
return false;
}

// calcola quanto spazio abbiamo bisogno per i dati
int size = message.toByteArray (). length;
if (ndef.getMaxSize () size) {
displayMessage ("Il tag non dispone di spazio libero sufficiente.");
return false;
}

ndef.writeNdefMessage (messaggio);
displayMessage ("Tag scritto con successo.");
restituire vero;
} altro {
// tenta di formattare il tag
Formato NdefFormatable = NdefFormatable.get (tag);
if (format! = null) {
provare {
format.connect ();
format.format (messaggio);
displayMessage ("Tag scritto con successo!");
restituire vero;
} catch (IOException e) {
displayMessage ("Impossibile formattare il tag in NDEF.");
return false;
}
} altro {
displayMessage ("Il tag non sembra supportare il formato NDEF.");
return false;
}

02. NDEF

I dati che archiviamo sono organizzati in record NDEF all'interno di un singolo messaggio NDEF. La prima cosa che facciamo è creare un "record dell'applicazione", appRecord. Questa è una novità per Android 4, costringe il sistema ad avviare la tua app prima degli altri se nel tag NFC viene trovato un nome di pacchetto corrispondente. Dopodiché creiamo il nostro cardRecord che contiene una console di gioco generata casualmente. Il carico utile è dove memorizziamo i nostri dati personalizzati, in questo caso semplicemente il nome di una console di gioco in minuscolo.

Successivamente determiniamo se il tag è già formattato NDEF chiamando Ndef.get (tag). Se è già formattato NDEF, controlliamo che sia scrivibile e che i dati non siano troppo grandi. Se tutto va bene, scriviamo i dati con ndef.writeNdefMessage (). Se il tag non era già formattato NDEF, utilizziamo NdefFormattable.format () per scrivere i dati contemporaneamente alla formattazione del tag. Ecco fatto, abbiamo scritto un tag NFC!

Con il tag scritto, premi il pulsante Home per uscire dall'app e scansionare nuovamente il tag. Dovrebbe ora avviare il file CardActivity e mostra la scheda di gioco della console. Aprire CardActivity.java per vedere come leggiamo le informazioni dal Intento:

Intento intento = getIntent ();
if (intent.getType ()! = null && intent.getType (). equals (MimeType.NFC_DEMO)) {
Parcelable [] rawMsgs =
getIntent (). getParcelableArrayExtra (NfcAdapter.EXTRA_NDEF_

MESSAGGI);
NdefMessage msg = (NdefMessage) rawMsgs [0];
NdefRecord cardRecord = msg.getRecords () [0];
String consoleName = new String (cardRecord.getPayload ());
displayCard (consoleName);
}

}
} catch (eccezione e) {
displayMessage ("Impossibile scrivere il tag");
}

return false;
}

Qui stiamo semplicemente controllando il file Intento per assicurarci che il tipo corrisponda al nostro tipo MIME personalizzato. Con quella determinazione possiamo andare avanti e afferrare il file NdefMessage dagli extra di Intent. Nel nostro caso conosciamo il primo NdefRecord è nostro cardRecord, contenente il nome della nostra console nel payload. Con il nome della console noto, mostriamo semplicemente l'immagine corretta in un ImageView.

In pochissimo tempo siamo riusciti a scrivere dati personalizzati su un tag NFC, scaricare automaticamente un'app per leggerla e rileggere i dati di gioco personalizzati. Da qui puoi espandere la demo per diventare un gioco completamente giocabile e persino utilizzarlo Android Beam'Sda telefono a telefono NFC per renderlo multiplayer.

Questo mi piaceva? Leggi questo!

  • Come costruire un'app
  • Selezione di font graffiti gratuita
  • Tutorial di Illustrator: idee fantastiche da provare oggi!
  • La guida definitiva per progettare i migliori loghi
  • I migliori font web gratuiti per i designer

Parole: Richard Leggett

Richard è il fondatore di Valis Interactive, concentrandosi sullo sviluppo di app per dispositivi mobili e web.

Popolare
5 modi per esporre la tua opera d'arte in una galleria
Per Saperne Di Più

5 modi per esporre la tua opera d'arte in una galleria

Anche e il Web con ente alle tue opere d'arte di e ere potenzialmente vi te da milioni di per one, non c'è niente come il vantaggio di avere il tuo lavoro fi ico e po to in una galleria d...
Suggerimenti sui social media: consigli imperdibili per artisti e designer
Per Saperne Di Più

Suggerimenti sui social media: consigli imperdibili per artisti e designer

I con igli ui ocial media di de igner profe ioni ti potrebbero e ere proprio ciò di cui hai bi ogno per far progredire la tua carriera. Il modo in cui utilizzi i ocial media può avere un eno...
Fantastici disegni di fan art di Dawn of Justice
Per Saperne Di Più

Fantastici disegni di fan art di Dawn of Justice

Il ucce o dei film Marvel e DC ha vi to un aumento delle produzioni di upereroi, con grande gioia e, in alcuni ca i, gomento - dei fan dei fumetti di tutto il mondo. L'ultima u cita DC, che u cir&...