Android Near-Field Communication - Transylvania JUG

stuckwarmersMobile - sans fil

14 déc. 2013 (il y a 3 années et 6 mois)

160 vue(s)

NFC


N
ear
F
iled
C
ommunication


Is a short range high frequency wireless communication
technology


Low speed (106 to 424 kbps)


Low friction setup (no discovery, no pairing)


NFC is an extension of Radio frequency identification (RFID)
technology

-

RFID is mainly used for tracking and identification by sending radio waves


2

What is NFC?

How NFC works?

Use NFC to read
information from a tag

Use NFC to read peer to
peer information

How NFC is used with Android?



NFC feature is available from
Android 2.3 version



Android Ice Cream Sandwich 4.0
introduced a new peer
-
to
-
peer
interaction model



0
-
click contact sharing



0
-
click web page sharing



0
-
click youtube video sharing


How to NFC?

Reading NDEF data from an NFC tag



=
N
fc
D
ata
E
xchange
F
ormat



By design, NDEF data is dispatched to only
one
activity



The type of the first NDEF record is used for dispatch



The
data container format for NFC

More on

http://developer.android.com/reference/android/nfc/NdefMessage.html


http://developer.android.com/reference/android/nfc/NdefRecord.html


Reading NDEF data

Different Dispatch Types

Reading NDEF data


Android Manifest


<
intent
-
filter
>


<
action
android:name
=
"android.nfc.action.NDEF_DISCOVERED"

/>


<
category

android:name
=
"android.intent.category.DEFAULT"

/>


<
data

android:mimeType
=
"text/plain"

/>

</
intent
-
filter
>


Activity class onResume


@Override


protected

void

onResume() {





if

(NfcAdapter.
ACTION_NDEF_DISCOVERED
.equals(getIntent().getAction())) {



NdefMessage[] messages = getNdefMessages(getIntent());




byte
[] payload = messages[0].getRecords()[0].getPayload();





}





How to use NFC reading within Java code

Writing NDEF data

Writing NDEF tags



String text;


NdefRecord textRecord =
new

NdefRecord(NdefRecord.
TNF_MIME_MEDIA
,
"text/plain"
.getBytes(),
text.getBytes());


NdefMessage textMessage =
new

NdefMessage(
new

NdefRecord[]{textRecord});


Tag tag = getIntent().getExtra(NfcAdapter.
EXTRA_TAG
);


Ndef ndef = Ndef.
get
(tag);


ndef.writeNdefMessage(textMessage);



Writing Peer to Peer



Foreground Activities can register an NDEF payload for P2P

push

Register the payload in advance

adapter.enableForegroundNdefPush(this, ndefMessage);



Ice Cream Sandwich preview

Register interest in P2P in advance, push the payload live

public interface NdefPushCallback {

public NdefMessage createMessage();

}

adapter.registerForegroundNdefPush(this, callback);

Writing NDEF data

Sources

http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#tag
-
dispatch

http://static.googleusercontent.com/external_content/untrusted_dlcp/www.googl
e.com/en//events/io/2011/static/presofiles/how_to_nfc.pdf

http://www.jessechen.net/blog/how
-
to
-
nfc
-
on
-
the
-
android
-
platform/

http://developer.android.com/reference/android/nfc/package
-
summary.html


Questions & (hopefully) Answers


String question = audience.getNextQuestion();



while (question != null && timeLeft.getValue() > 0) {



try {



answer(question);


} catch (AnswerNotKnownException e) {



MakeSomethingUp();



LOG.warn("Missed one: " + question, e);


}



question = audience.getNextQuestion();


timeLeft.update();

}

audience.thankForAttention();