安卓手機APP開發__近距離無線通信(NFC)概述
概述
近距離無線通信 (NFC) 是一組近距離無線技術,距離通常不超過 4 厘米才能
發起連接。通過 NFC,您可以在 NFC 標簽和 Android 設備之間,或兩臺 Android 設備之間共享較小的數據載荷。
標簽的復雜度可能各有不同。簡單的標記僅提供讀取和寫入語義,有時還具有
一次性可編程區域,使卡片變為只讀。更復雜的標簽可提供數學運算,并具有
加密硬件來對扇區訪問進行身份驗證。最復雜的代碼都包含操作環境,允許與
代碼上執行的代碼進行復雜的互動。存儲在標簽中的數據也可以采用多種格式
編寫,但許多 Android 框架 API 都基于名為 NDEF(NFC 數據交換格式)的
NFC Forum 標準。
具有 NFC 功能的 Android 設備同時支持三種主要操作模式:
??? 讀取器/寫入器模式,允許 NFC 設備讀取和寫入被動 NFC 標簽和貼紙。
??? 點對點模式,允許 NFC 設備與其他 NFC 對等設備交換數據;Android Beam 使用此操作模式。
??? 卡模擬模式,允許 NFC 設備本身充當 NFC 卡。然后,可通過外部 NFC
??? 讀取器(例如 NFC 銷售終端)訪問模擬 NFC 卡。
NFC 基礎知識
??? 將 NDEF 數據與 Android 結合使用時,會有兩個主要用例:
??? 從 NFC 標簽讀取 NDEF 數據
??? 使用 Android BeamTM 將 NDEF 消息從一臺設備傳輸到另一臺設備
從 NFC 標簽讀取 NDEF 數據的操作由標簽調度系統處理,該系統分析發現的 NFC 標簽,對數據進行適當分類,然后啟動對分類數據感興趣的應用。想要處理掃描的 NFC 標簽的應用可以聲明 intent 過濾器并請求處理數據。
借助 Android BeamTM 功能,設備可以將 NDEF 消息推送到另一臺設備,只需將兩臺設備實際靠在一起即可。與藍牙等其他無線技術相比,這種互動提供了一種更簡便的數據發送方式,因為使用 NFC 時無需手動發現或配對設備。當兩部設備接近時,連接會自動開始。Android Beam 通過一組 NFC API 提供,因此任何應用都可以在設備之間傳輸信息。例如,通訊錄、瀏覽器和 YouTube 應用使用 Android Beam 與其他設備共享聯系人、網頁和視頻。
標簽調度系統
Android 設備通常會在屏幕解鎖時查找 NFC 標簽,除非在設備的“設置”菜單中停用了 NFC 功能。當 Android 設備發現 NFC 標簽時,期望的行為是讓最合適的 activity 處理 intent,而無需詢問用戶要使用哪個應用。由于設備在非常短的范圍內掃描 NFC 標簽,因此讓用戶手動選擇 activity 可能會迫使用戶將設備從標簽中移除并斷開連接。您應將 activity 開發為僅處理 activity 關注的 NFC 標簽,以防止 activity 選擇器顯示。
為了幫助您實現這一目標,Android 提供了一個特殊的標簽調度系統,該系統可以分析掃描的 NFC 標簽、解析這些標簽,并嘗試定位對掃描的數據感興趣的應用。其實現方式如下:
??? 解析 NFC 標簽并確定 MIME 類型或 URI(用于標識標簽中的數據載荷)。
??? 將 MIME 類型或 URI 與負載一起封裝到 Intent 中。NFC 標簽如何映射到 MIME 類型和 URI 中介紹了前兩個步驟。
??? 根據 Intent 啟動 Activity。如何將 NFC 標簽分發到應用中介紹了這一點。
如何將 NFC 標簽映射到 MIME 類型和 URI
在開始編寫 NFC 應用之前,請務必先了解不同類型的 NFC 標簽、標簽調度系統如何解析 NFC 標簽,以及標簽調度系統在檢測到 NDEF 消息時所做的特殊工作。NFC 標簽涉及多種技術,也可以通過多種不同方式將數據寫入 NFC 標簽。Android 對 NFC Forum 定義的 NDEF 標準的支持最多。
NDEF 數據封裝在包含一條或多條記錄 (NdefRecord) 的消息 (NdefMessage) 中。每條 NDEF 記錄的格式都必須正確,符合您要創建的記錄類型的規范。Android 還支持其他類型的不包含 NDEF 數據的標簽,您可以使用 android.nfc.tech 軟件包中的類來處理這些標簽。如需詳細了解這些技術,請參閱高級 NFC 主題。在處理這些其他類型的標簽時,您需要編寫自己的協議堆棧來與這些標簽進行通信,因此我們建議您盡可能使用 NDEF,以簡化開發并最大限度地支持 Android 設備。
高級 NFC
??? 本文檔將介紹可使用 Android 支持的各種標簽技術的 API。如果您不處理 NDEF 數據,或者當您處理 Android 無法完全理解的 NDEF 數據,則必須使用自己的協議堆棧手動讀取或寫入原始字節中的標簽。在這些情況下,Android 支持檢測某些標簽技術,并使用您自己的協議堆棧開放與標簽的通信。
??? 使用支持的標簽技術
處理 NFC 標簽和 Android 設備時,用于讀取和寫入標簽數據的主要格式是 NDEF。當設備掃描包含 NDEF 數據的標簽時,Android 會盡可能支持解析消息并在 NdefMessage 中傳遞。不過,在某些情況下,您掃描的標簽不包含 NDEF 數據,或者 NDEF 數據無法映射到 MIME 類型或 URI。在這些情況下,您需要直接開啟與標簽的通信,并使用您自己的協議(以原始字節形式)對其執行讀寫操作。Android 通過 android.nfc.tech 軟件包對這些用例提供一般性支持,如表 1 中所述。您可以使用 getTechList() 方法確定標簽支持的技術,并使用 android.nfc.tech 提供的類之一創建相應的 TagTechnology 對象
基于主機的卡模擬
許多提供 NFC 功能的 Android 設備已經支持 NFC 卡模擬。在大多數情況下,卡由設備中的一個單獨的芯片(稱為安全元件)模擬。無線運營商提供的許多 SIM 卡也包含安全元件。
Android 4.4 及更高版本提供了一種不涉及安全元件的額外卡模擬方法,稱為“基于主機的卡模擬”。這樣一來,任何 Android 應用都可以模擬卡并直接與 NFC 讀取器通信。本主題介紹了基于主機的卡模擬 (HCE) 在 Android 上的工作原理,以及如何開發使用此技術模擬 NFC 卡的應用。
使用安全元件進行卡模擬
使用安全元件提供 NFC 卡模擬時,要模擬的卡會通過 Android 應用配置到設備上的安全元件中。然后,當用戶將設備靠近 NFC 終端時,設備中的 NFC 控制器會將來自讀取器的所有數據直接路由到安全元件。