NFC的基礎知識
一、前言
在現如今的生活中,NFC已經遍佈了我們生活的很多方面,我們的很多工具以及生活方式都離不開NFC。比如最常用的公交卡,現在逐漸流行的手機刷公交卡、各種接觸式的卡片均使用了NFC的技術。還有一些接觸式的工具,比如手機貼近一張卡片便可以自動鏈接上WiFi、手機閃付等。因爲NFC的有效距離最遠爲4CM,其安全性高,又方便。由於其成本不高,而安全性卻很強加上方便,故多使用於和支付相關的生活中。
二、NFC簡介
什麼是NFC呢,深了說就是一堆協議,說的通俗點就是近距離自動識別鏈接傳輸數據包。生活中很多情況下,只需要把手機貼在某個物品或工具上就可以獲取或發送信息,這種方式就是使用了NFC。NFC的識別傳輸信息的距離特別短,只有4cm之內纔是有效距離。
三、NFC三種工作模式
1)R/W模式
R/W模式也就是讀寫模式,即最常用的從一個NFC TAG中讀取或寫入信息。該模式下只能由NFC device 向 NFC TAG中進行寫入或讀取操作,而並不能反着來。在R/W模式中的核心就是NFC TAG的操作,即如何識別TAG,根據不同的TAG進行不同的操作。在Google 的 Android 系統中有兩個專門對NFC TAG進行分類,分派給不同activity進行操作處理的系統。他們就是TAG分發系統和前臺分發系統。
【NFC TAG分發系統】
mobile NFC control識別一個NFC TAG時,會首先分析這個TAG裏的內容。
- 當TAG 裏的內容符合Android 數據類型標準時(也就是URI或MIME兩種類型),那麼NFC系統模塊會將ACTION_NDEF_DISCOVERD 通知 和 該TAG對象一起裝入一個Intent中發送給對ACTION_NDEF_DISCOVERD感興趣的activity。如果沒有找到對該通知感興趣的activity,那麼會重新將ACTION_TECH_DISCOVERD 和 該TAG對象一起裝入一個Intent中發送給對 ACTION_TECH_DISCOVERD 感興趣的activity。如果還是沒找到,那麼會再次重新將ACTION_TAG_DISCOVERD 和該TAG對象一起裝入Intent中發送給對ACTION_TAG_DISCOVERD 感興趣的activity。
- 當TAG裏的內容不符合Android數據類型標準時,那麼NFC 系統模塊會直接將ACTION_TECH_DISCOVERD 和該TAG 對象裝入到一個Intent中然後發送給對ACTION_TECH_DISCOVERD感興趣的activity。如果沒找到,那麼會再次重新將ACTION_TAG_DISCOVERD 和該TAG對象一起裝入Intent中發送給對ACTION_TAG_DISCOVERD 感興趣的activity。
【前臺分發系統 和 TAG分發系統的區別】
- 前臺分發系統只會在當前活躍的activity(當前顯示的activity)中查詢,查詢是否該activity對該通知感興趣。如果配置了相應的filter即感興趣,那麼會將對應的TAG對象發給該activity。在該activity到後臺運行的時候他需要取消前臺分發功能,因爲它不再是前臺activity。
- TAG分發系統中,只要activity在AndroidManifest中配置了filter對該通知感興趣,那麼就會啓動該activity,然後將TAG對象發給它。
2)P2P模式
使用NFC devices對NFC TAG的操作是R/W模式,那麼兩個NFC devices之間通信怎麼辦呢?此時就要用到P2P模式了。
P2P模式是用來爲兩個NFC devices之間進行NFC通信的。P2P模式簡單的來說就是在發送端對兩個函數的操作:
- setNdefPushMessageCallback:設置一個回調對象,如果該對象不爲空,那麼當前ACtivity
會調用Android beam(Android 4.0以上纔有)來發送所要發的內容。該函數作用是:兩個設備在NFC有效的範圍內時,系統會彈出數據發送通知框。如果用戶選擇本機發送數據,則NFC模塊回調對象會獲取需要發送的數據。
- setOnNdefPushCompleteCallback:當數據發送完畢後通知回調對象。當數據發送完畢後,
系統會調用該回調對象的函數。
P2P模式涉及到很多協議,例如 SNEP、LLCP等協議,這些協議以後討論。
3)CE模式
如果想將NFC Devices作爲一個NFC TAG被使用,那麼就需要用到CE模式了。生活中常講的閃付也是這個道理。在上層操作NFC的CE模式,需要加載nfc_extras.jar包,然後纔可以具體操作。這些後續會詳細說明。