Android NFC簡介

  

目錄:

Android NFC . 1

1 簡介 ... 1

1.1 什麼是 NFC . 1

1.2 Android 上的 NFC . 2

1.3 Android 中的 NFC 通訊機制 ... 2

2 用法 ... 3

2.1 讀取 tag . 3

2.2 發送消息 ... 5

2.2.1 發送過程 ... 5

2.2.2 NDEF 消息格式 ... 6

 

 

1 簡介

1.1 什麼是 NFC

近場通訊 (Near Filed Communication) 技術是一種近距離的高頻無線通信技術, 通常距離是4 釐米或更短。 NFC 工作頻率是 13.56M Hz, 傳輸速率是 106kbit/s 848kbit/s. NFC 總是在一個發起者和一個被動目標之間發生。發起者發出近場無線電波,這個近場可以給被動目標供電。這些被動的目標包括不需要電源的標籤,卡,也可以是有電源的設備。

與其他無線通信技術比較, 例如藍牙和 WiFi NFC 提供更低貸款和距離,並且低成本,不需要供電,不需要實現匹配,整個通信過程僅僅是短短的靠近一秒就能完成。

1.2 Android 上的 NFC

Android Android 2.3(API Level 9) 中首次增加了對NFC 的支持,但是隻能讀取tag ,有很多不完善的地方。在Level 10 中增加了對tag 的寫,不過構造和解析消息都是需要自己來處理。

後來的Android 4.0 ICS(API Level 14) 中全面提升了NFC 的功能,支持兩臺NFC 手機的相互通信,並且封裝了方便的消息構造和解析接口。

Android 提供了三種級別的NFC 消息:

Ø  android.nfc.action.NDEF_DISCOVERED : 由應用程序構造的NDEFNFC Data Exchange Format NFC 數據交換格式)消息。

Ø  android.nfc.action.TECH_DISCOVERED :  現有的標準NFC 協議構造的消息。

Ø  android.nfc.action.TAG_DISCOVERED :不符合前面兩種格式的消息。

1.3 Android 中的 NFC 通訊機制

           首先應用程序向系統註冊感興趣的Intent ,當系統的NFC 服務收到一條tag 之後,會打開合適的應用並傳遞Intent 。如果同時有N 個應用都對這個tag 感興趣,並且都不在前臺,則系統會彈出選擇列表讓用戶選擇,如果其中某個應用在前臺,則系統直接將Intent 投遞到此應用。具體如何註冊見後面的用法。

 

2 用法

2.1 讀取 tag

首先,必須在manifest 中申明NFC 的權限和feature

< uses-permission android:name = "android.permission.NFC" />

< uses-feature android:name = "android.hardware.nfc" />

如果應用必須擁有NFC 的手機才能安裝,則在 uses-feature 中加上屬性 android:required = "true" 方便marekt 過濾。

 

然後註冊感興趣的Intent

u  NDEF 格式的消息

這裏的data 指定了感興趣的數據類型和格式,系統會自動過濾出符合條件的Intent 。上面這個data 表示只接受純文本的數據。如果只接受 http://www.qq.com 這個網址,則data 定義如下:

注意,這個類型 < category android:name = "android.intent.category.DEFAULT" /> 要加上。

 

u  TECH 格式的消息

meta-data 中的resource 指定了對使用了哪些技術的tag 感興趣。filter_nfc.xml 的內容如下:

這裏是將所有的tech 標準都放到裏面了,實際使用的時候不應如此,應該取一個或多個子集。這裏關於tech 列表的子集定義還有一些規範,網上可以查到,就不贅述。

 

u  TAG 格式的消息

如此,則所有沒有被捕獲的Intent 就會發送到這裏來,算是各種未知NFC 數據的集散地。

 

Tag 分發系統流程圖如下:

 

2.2 發送消息

       2.2.1 發送過程

首先取得一個NFCAdapter ,一般是使用默認的:

 

三個發送消息相關的API

Ø  public void setNdefPushMessage (NdefMessage message, Activity activity, Activity... activities)

設置NDEF 消息。API 文檔上說這個方法設置之後不需要讓用戶操作,設備靠近會自行發出,但是經過嘗試發現不行,也許是有什麼沒注意到的地方。

 

Ø  public void setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)

設置NDEF 消息的構造器,每次構造消息都會調用callbackcreateNdefMessage 方法獲取NDEF 消息。

 

Ø  public void setOnNdefPushCompleteCallback (NfcAdapter.OnNdefPushCompleteCallback callback, Activity activity, Activity... activities)

設置NDEF 消息發送完畢之後的回調接口。

 

       2.2.2 NDEF 消息格式

一個NdefMessage 對象是由NNdefRecord 組成,NdefRecord 可以根據自己的需要去定義裏面的內容,不過如果要構造公共的標準NdefRecord ,就需要查閱API 文檔了。

簡單的用法如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章