1. 程式人生 > >Android硬體之NCF技術(近場通訊技術)

Android硬體之NCF技術(近場通訊技術)

Android硬體之NFC技術 NFC(Near Field Communication,近場通訊),是一種資料傳輸技術。但是,與Wi-Fi、藍芽、紅外線等技術最主要的差異就是有效距離,NFC的有效距離很短,一般不超過10釐米。 Android 2.3.1( API Level = 9 ) 開始支援NFC技術,但Android 2.x 和 3.x 對NFC的支援非常有限。而從Android 4.0 ( API Level = 14 )開始,Google 開始向NFC發力,NFC技術在Android中得到了更進一步的支援。尤其是4.1,可以利用NFC技術傳遞較大的資料(NFC會利用藍芽結合進行大資料量的傳輸)
NFC的工作模式:
  • 讀卡器模式(Reader / Writer Mode)
  • 模擬卡模式(Card Emulation Mode)
  • 點對點模式(P2P Mode)
讀卡器模式: 讀卡器模式本質上就是通過NFC裝置(比如支援NFC的Android手機)從帶有NFC晶片的標籤,貼紙,明信片,報紙,名片等媒介讀取資訊,或者將資料寫到這些媒介中。貼有NFC貼紙的產品在市面上很常見。 模擬卡模式: 模擬卡模式就是將支援NFC的手機或者其他電子裝置當成借記卡、信用卡、公交卡、門禁卡等IC卡使用。基本原理就是將相應IC卡中的資訊(支付憑證)封裝成資料包儲存在支援NFC的手機中。在使用時,還需要一個NFC射頻器(相當於刷傳統IC卡使用的刷卡器)。將手機靠近NFC射頻器,手機就會接收到NFC射頻器發過來的訊號,在通過一些列驗證後,將IC卡的相應資訊傳入NFC射頻器,最後這些IC卡資料會傳入NFC射頻器連線的電腦,並進行相應的處理。
點對點(P2P)模式: 該模式與藍芽、紅外線差不多,可以用於不同NFC裝置之間進行資料交換,只是NFC的點對點模式有效距離更短(不能超過10釐米),而且傳輸建立速度要比紅外線和藍芽技術快很多。
點對點模式的典型應用是兩部支援NFC的手機或平板電腦實現資料的點對點傳輸,例如,下載音樂、交換圖片、同步裝置地址薄。因此,通過NFC,多個裝置如數字相機,PDA,計算機,手機之間,都可以快速連結並交換資料或者服務。 NFC、藍芽和紅外線的比較
NFC 藍芽 紅外
網路型別 點對點 單點對多點 點對點
使用距離 ≤0.1m ≤10m ≤1m
傳輸速度 106、212、424、868、721、115Kbps 2.1 Mbps ~1.0 Mbps
建立時間 < 0.1s 6s 0.5s
安全性 具備, 硬體實現 具備,軟體實現 不具備, 使用IRFM 時除外
通訊模式 主動-主動/被動 主動-主動 主動-主動
成本
NFC標籤 不同的NFC標籤之間差異很大,有的比較簡單,只支援簡單的讀寫操作,有的會將標籤設計成只讀變成類似光碟一樣。有的比較複雜,比如有的可以通過硬體加密限制你的訪問區域。 Android SDK API 主要支援NFC論壇標準,這種標準被稱為NFC資料交換格式,簡稱NDEF(NFC Data Exchange Format )。 NFC的三重過濾機制 在一個NFC裝置讀取NFC標籤或另一個NFC裝置中的資料之前會在0.1秒之內建立NFC連線,然後資料會自動從被讀的一端流向取資料的一端。資料接收端會根據具體的資料格式和標籤型別呼叫相應的Activity(這種行為也稱為Tag Dispatch)。這些Activity都需要定義Intent Filter。這些Intent Filter中就會指定不同的過濾機制,分為3個級別。因此,也稱為NFC的三重過濾機制。 三重過濾機制:
  • NDEF_DISCOVERED:只過濾固定格式的NDEF資料。例如,純文字、指定協議(http、ftp、smb等)的URI等。
  • TECH_DISCOVERED:當ACTION_NDEF_DISCOVERED指定的過濾機制無法匹配Tag時,就會使用這種過濾機制進行匹配。這種過濾機制並不是通過Tag中的資料格式進行匹配的,而是根據Tag支援的資料儲存格式進行匹配。因此這種過濾機制的範圍更廣。
  • TAG_DISCOVERED:如果將NFC的過濾機制看成是if……else if……else語句的話,那麼這種過濾機制相當於最後的else語句。前面兩種過濾機制都失敗了,系統就會利用這種過濾機制來處理。這種過濾機制用來處理未識別的Tag(資料格式不對,而且Tag支援的格式也不匹配)。

Android系統會一次匹配上述三種過濾機制,如果通過三重過濾機制仍然無法匹配Tag,就什麼也不做。通常在成功匹配Tag後,Android裝置會發出比較清脆的聲音,而未成功匹配Tag,就會發出比較沉悶的聲音。 注意事項:
  • 設定許可權
           <uses-permission android:name="android.permission.NFC">
  • 限制安卓版本
           <uses-sdk android:minSdkVersion="14">
  • 限制安裝的裝置的硬體
            <uses-feature android:name="android.hardware.nfc"               android:required="true" />
  • Android Beam技術
對於在Android 4.1以後,NFC傳遞資料較大時,可以使用Android Beam 技術,此技術會通過NFC啟用藍芽,會利用藍芽結合進行大資料量的傳輸。(此時的藍芽無需匹配,直接在內層就被呼叫了) 用於描述NDEF格式資料的兩個重要的類 NdefMessage:描述NDEF格式的資訊 NdefRecord:描述NDEF資訊的一個資訊段 這兩個類是Android NFC技術的核心類,無論讀寫NDEF格式的NFC標籤,還是通過Android Beam技術傳遞Ndef格式的資料,都需要這兩個類。 向NFC標籤寫入資料的步驟
  • 獲取Tag物件
Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  • 判斷NFC標籤的資料型別(通過Ndef.get方法)
Ndef ndef = Ndef.get(tag);
  • 寫入資料
ndef.writeNdefMessage(ndefMessage);
例子:通過NFC自動啟動Android應用程式 此例子,先獲取本機中安裝的所有程式,然後選擇之後,需要將對應的NFC標籤或者貼紙靠近手機,然後就會自動啟動。 NDEF的規範 需要與NFC標籤傳遞資料時,需要一定的格式,也就是NDEF的各種格式規範: 其中,這些規範十分常用:   Android Beam Android Beam的基本理念就是兩部NFC裝置靠近時,通過觸控一部NFC裝置的螢幕,將資料推向另外一部NFC裝置。PS:在傳遞過程中需保持較近的距離。