微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > Android 2.3.3 近场通信NFC介绍

Android 2.3.3 近场通信NFC介绍

时间:04-19 来源:互联网 点击:

#enableForegroundDispatch%28android.app.Activity,%20android.app.PendingIntent,%20android.content.IntentFilter[],%20java.lang.String[][]%29]enableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][])[/url]而且Activity 在前台(可以在 onResume() 里调用来保证这点)。你也要覆盖 onNewIntent 回调来处理得到的 NFC tag 数据。

public void onPause () {

super . onPause ();

mAdapter . disableForegroundDispatch ( this );

}

public void onResume () {

super . onResume ();

mAdapter . enableForegroundDispatch ( this , pendingIntent , intentFiltersArray, techListsArray );

}

public void onNewIntent ( Intent intent ) {

Tag tagFromIntent = intent . getParcelableExtra ( NfcAdapter . EXTRA_TAG );

//do something with tagFromIntent

}

See the ForegroundDispatch sample from API Demos for the complete sample.

使用 NFC tag 上的数据

NFC tag 上的数据是以字节存放,所以你可以将其转换成其他你想要的格式。当往 tag 写东西时,你必须以字节格式来写。 Android 提供 API 来帮助写符合 NDEF 标准的信息。使用此标准能保证你的数据在往 tag 写时能被所有 Android NFC 设备支持。然而,很多 tag 使用他们自己的标准来存储数据,这些标准也被 Android 支持。但你必须自己实现协议栈来读写这些 tag 。你可以在 android.nfc.tech 里找到所有支持的 technologies ,并且可以在 TagTechnology 接口里对technology 有个了解。这一段是简单介绍在 android 系统里怎样使用 NDEF 消息。这不意味着是一个完整的 NDEF 功能的介绍。但标出了主要需要注意和使用的东西。

为了方便使用 NDEF 消息, android 提供 NdefRecord和 NdefMessage来包装原始字节数据为 NDEF 消息。一个NdefMessage 是保存 0 个或多个 NdefRecords 的容器。每个 NdefRecord 有自己的唯一类型名字格式,记录类型和 ID 来与其他记录区分开。你可以存储不同类型的记录,不同的长度到同一个 NdefMessage 。 NFC tag 容量的限制决定你的NdefMessage 的大小。

那些支持 Ndef 和 NdefFormatable 技术的 tag 可以返回和接受 NdefMessage 对象为参数来进行读写操作。你需要创建你自己的逻辑来为其他在 android.nfc.tech 的 tag 技术实现读写字节的操作。

你可以从 NFC Forum(http://www.nfc-forum.org/specs/) 下载 NDEF 消息标准的技术文档,比如纯文本和智慧型海报 . NFCDemo 例子里声明了纯文本和智慧型海报的 NDef 消息。

读一个 NFC tag

当一个 NFC tag 靠近一个 NFC 设备,一个相应的 Intent 将在设备上被创建。然后通知合适的程序来处理此 Intent 。

下面的方法处理 TAG_DISCOVERED intent 并且使用迭代器来获得包含在 NDEF tag 负载的数据

NdefMessage [] getNdefMessages ( Intent intent ) {

// Parse the intent

NdefMessage [] msgs = null ;

String action = intent . getAction ();

if ( NfcAdapter . ACTION_TAG_DISCOVERED . equals ( action )) {

arcelable [] rawMsgs = intent . getParcelableArrayExtra ( NfcAdapter .EXTRA_NDEF_MESSAGES );

if ( rawMsgs != null ) {

msgs = new NdefMessage [ rawMsgs . length ];

for ( int i = 0 ; i rawMsgs . length ; i ++) {

msgs [ i ] = ( NdefMessage ) rawMsgs [ i ];

}

}

else {

// Unknown tag type

byte [] empty = new byte [] {};

NdefRecord record = new NdefRecord ( NdefRecord . TNF_UNKNOWN , empty , empty, empty );

NdefMessage msg = new NdefMessage ( new NdefRecord [] { record });

msgs = new NdefMessage [] { msg };

}

}

else {

Log . e ( TAG , Unknown intent + intent );

finish ();

}

return msgs ;

}

请记住 NFC 设备读到的数据是 byte 类型,所以你可能需要将他转成其他格式来呈现给用户。 NFCDemo 例子展示了怎样用 com.example.android.nfc.record 中的类来解析 NDEF 消息,比如纯文本和智慧型海报。

写 NFC tag

往 NFC tag 写东西涉及到构造一个 NDEF 消息和使用与 tag 匹配的 Tag 技术。下面的代码展示怎样写一个简单的文本到NdefFormatable tag :

NdefFormatable tag = NdefFormatable . get ( t );

Locale locale = Locale . US ;

final byte [] langBytes = locale . getLanguage (). getBytes ( Charsets . US_ASCII );

String text = Tag, you're it! ;

final byte [] textBytes = text . getBytes ( Chars

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top