溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

深入分析Android NFC技術(shù) android nfc開發(fā)

發(fā)布時間:2020-10-18 10:54:10 來源:腳本之家 閱讀:225 作者:laozhang 欄目:移動開發(fā)

從概念,實(shí)現(xiàn)原理以及最紅實(shí)現(xiàn)的源碼等有助于大家對NFC技術(shù)有更深入的理解。

NFC 是 Near Field Communication 縮寫,即近距離無線通訊技術(shù)??梢栽谝苿釉O(shè)備、消費(fèi)類電子產(chǎn)品、PC 和智能控件工具間進(jìn)行近距離無線通信。簡單一點(diǎn)說,nfc 功能是什么?nfc功能有什么用?其實(shí)NFC提供了一種簡單、觸控式的解決方案,可以讓消費(fèi)者簡單直觀地交換信息、訪問內(nèi)容與服務(wù)。NFC 技術(shù)允許電子設(shè)備之間進(jìn)行非接觸式點(diǎn)對點(diǎn)數(shù)據(jù)傳輸,在十厘米(3.9英吋)內(nèi),交換數(shù)據(jù),其傳輸速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三種。接下來我們更加詳細(xì)的來了解一下nfc的應(yīng)用。

深入分析Android NFC技術(shù) android nfc開發(fā)

一、nfc是什么,它的工作模式?

NFC工作模式主要有三種工作模式,分別是卡模式(Card emulation)、點(diǎn)對點(diǎn)模式(P2P mode)和讀卡器模式(Reader/writer mode)。

(1)讀卡器模式 http://www.jianshu.com/p/e89cc9bba8a6

數(shù)據(jù)在NFC芯片中,可以簡單理解成“刷標(biāo)簽”。本質(zhì)上就是通過支持NFC的手機(jī)或其它電子設(shè)備從帶有NFC芯片的標(biāo)簽、貼紙、名片等媒介中讀寫信息。通常NFC標(biāo)簽是不需要外部供電的。當(dāng)支持NFC的外設(shè)向NFC讀寫數(shù)據(jù)時,它會發(fā)送某種磁場,而這個磁場會自動的向NFC標(biāo)簽供電。

(2)仿真卡模式

數(shù)據(jù)在支持NFC的手機(jī)或其它電子設(shè)備中,可以簡單理解成“刷手機(jī)”。本質(zhì)上就是將支持NFC的手機(jī)或其它電子設(shè)備當(dāng)成借記卡、公交卡、門禁卡等IC卡使用?;驹硎菍⑾鄳?yīng)IC卡中的信息憑證封裝成數(shù)據(jù)包存儲在支持NFC的外設(shè)中 。在使用時還需要一個NFC射頻器(相當(dāng)于刷卡器)。將手機(jī)靠近NFC射頻器,手機(jī)就會接收到NFC射頻器發(fā)過來的信號,在通過一系列復(fù)雜的驗(yàn)證后,將IC卡的相應(yīng)信息傳入NFC射頻器,最后這些IC卡數(shù)據(jù)會傳入NFC射頻器連接的電腦,并進(jìn)行相應(yīng)的處理(如電子轉(zhuǎn)帳、開門等操作)。

(3)點(diǎn)對點(diǎn)模式

該模式與藍(lán)牙、紅外差不多,用于不同NFC設(shè)備之間進(jìn)行數(shù)據(jù)交換,不過這個模式已經(jīng)沒有有“刷”的感覺了。其有效距離一般不能超過4厘米,但傳輸建立速度要比紅外和藍(lán)牙技術(shù)快很多,傳輸速度比紅外塊得多,如過雙方都使用 Android4.2,NFC會直接利用藍(lán)牙傳輸。這種技術(shù)被稱為 AndroidBeam。所以使用 androidBeam 傳輸數(shù)據(jù)的兩部設(shè)備不再限于4厘米之內(nèi)。

深入分析Android NFC技術(shù) android nfc開發(fā)

二、Android 對 NFC 的支持

不同的 NFC 標(biāo)簽之間差異很大,有的只支持簡單的讀寫操作,有時還會采用支持一次性寫入的芯片,將 NFC 標(biāo)簽設(shè)計(jì)成只讀的。當(dāng)然,也存在一些復(fù)雜的 NFC 標(biāo)簽,例如,有一些 NFC 標(biāo)簽可以通過硬件加密的方式限制對某一區(qū)域的訪問。還有一些標(biāo)簽自帶操作環(huán)境,允許 NFC 設(shè)備與這些標(biāo)簽進(jìn)行更復(fù)雜的交互。這些標(biāo)簽中的數(shù)據(jù)也會采用不同的格式。但 Android SDK API 主要支持 NFC 論壇標(biāo)準(zhǔn)(Forum Standard),這種標(biāo)準(zhǔn)被稱為 NDEF(NFC Data Exchange Format,NFC 數(shù)據(jù)交換格式)。

NDEF 格式其實(shí)就類似于硬盤的NTFS,下面我們看一下 NDEF 數(shù)據(jù):

(1)NDEF數(shù)據(jù)的操作

Android SDK API支持如下3種NDEF數(shù)據(jù)的操作:

1)從NFC標(biāo)簽讀取NDEF格式的數(shù)據(jù)。

2)向NFC標(biāo)簽寫入NDEF格式的數(shù)據(jù)。

3)通過Android Beam技術(shù)將NDEF數(shù)據(jù)發(fā)送到另一部NFC設(shè)備。

用于描述NDEF格式數(shù)據(jù)的兩個類:

1)NdefMessage:描述NDEF格式的信息,實(shí)際上我們寫入NFC標(biāo)簽的就是NdefMessage對象。

2)NdefRecord:描述NDEF信息的一個信息段,一個NdefMessage可能包含一個或者多個NdefRecord。

NdefMessage和NdefRecord是Android NFC技術(shù)的核心類,無論讀寫NDEF格式的NFC標(biāo)簽,還是通過Android Beam技術(shù)傳遞Ndef格式的數(shù)據(jù),都需要這兩個類。

(2)非NDEF數(shù)據(jù)的操作

對于某些特殊需求,可能要存任意的數(shù)據(jù),對于這些數(shù)據(jù),我們就需要自定義格式。這些數(shù)據(jù)格式實(shí)際上就是普通的字節(jié)流,至于字節(jié)流中的數(shù)據(jù)代表什么,就由開發(fā)人員自己定義了。

(3)編寫NFC程序的基本步驟

1)設(shè)置權(quán)限,限制Android版本、安裝的設(shè)備:

深入分析Android NFC技術(shù) android nfc開發(fā)

2)定義可接收Tag的Activity,配置一下launchMode屬性:

深入分析Android NFC技術(shù) android nfc開發(fā)

三、實(shí)戰(zhàn)使用NFC標(biāo)簽

(1)利用NFC標(biāo)簽讓Android自動運(yùn)行程序

場景是這樣的:現(xiàn)將應(yīng)用程序的包寫到 NFC 程序上,然后我們將 NFC標(biāo)簽靠近 Android 手機(jī),手機(jī)就會自動運(yùn)行包所對應(yīng)的程序,這個是NFC 比較基本的一個應(yīng)用。下面以貼近標(biāo)簽自動運(yùn)行 Android 自帶的“短信”為例。

向NFC標(biāo)簽寫入數(shù)據(jù)一般分為三步:

1)獲取Tag對象

深入分析Android NFC技術(shù) android nfc開發(fā)

2)判斷NFC標(biāo)簽的數(shù)據(jù)類型(通過Ndef.get方法)

3)寫入數(shù)據(jù)

深入分析Android NFC技術(shù) android nfc開發(fā)

實(shí)際運(yùn)行效果如下:

操作步驟:

點(diǎn)擊自動打開短信界面或百度頁面,進(jìn)入對應(yīng) Activity,將 NFC 標(biāo)簽貼近手機(jī)背面,提示寫入成功。返回主界面,再將 NFC 標(biāo)簽貼近手機(jī)背面,便能看到自動打開短信或者打開百度頁面。

深入分析Android NFC技術(shù) android nfc開發(fā)

深入分析Android NFC技術(shù) android nfc開發(fā)

深入分析Android NFC技術(shù) android nfc開發(fā)

四、NDEF 文本格式深度解析

獲取 NFC 標(biāo)簽中的數(shù)據(jù)要通過 NdefRecord.getPayload 方法完成。當(dāng)然,在處理這些數(shù)據(jù)之前,最好判斷一下 NdefRecord 對象中存儲的是不是 NDEF 文本格式數(shù)據(jù)。

(1)判斷數(shù)據(jù)是否為NDEF格式

1)TNF(類型名格式,Type Name Format)必須是NdefRecord.TNF_WELL_KNOWN。

2)可變的長度類型必須是NdefRecord.RTD_TEXT。

如果這兩個標(biāo)準(zhǔn)同時滿足,那么就為NDEF格式。

(2)NDEF文本格式規(guī)范

不管什么格式的數(shù)據(jù)本質(zhì)上都是由一些字節(jié)組成的。對于NDEF文本格式來說,這些數(shù)據(jù)的第1個字節(jié)描述了數(shù)據(jù)的狀態(tài),然后若干個字節(jié)描述文本的語言編碼,最后剩余字節(jié)表示文本數(shù)據(jù)。這些數(shù)據(jù)格式由NFC Forum的相關(guān)規(guī)范定義,可以通過 http://members.nfc-forum.org/specs/spec_dashboard 下載相關(guān)的規(guī)范。

下面這兩張表是規(guī)范中 3.2節(jié) 相對重要的翻譯部分:

深入分析Android NFC技術(shù) android nfc開發(fā)

實(shí)現(xiàn) NFC 標(biāo)簽中的文本數(shù)據(jù)的讀寫操作:

深入分析Android NFC技術(shù) android nfc開發(fā)

深入分析Android NFC技術(shù) android nfc開發(fā)

點(diǎn)擊寫 NFC 標(biāo)簽中的文本數(shù)據(jù),跳轉(zhuǎn)到對應(yīng)的 Activity,將 NFC 標(biāo)簽卡貼近手機(jī),寫入成功后會提示,再退回主頁面,選擇讀文本數(shù)據(jù),便可讀取。

深入分析Android NFC技術(shù) android nfc開發(fā)

深入分析Android NFC技術(shù) android nfc開發(fā)

五、非 NDEF 格式(操作步驟如上圖,具體實(shí)現(xiàn)查閱項(xiàng)目代碼)

六、NDEF Uri格式存儲(操作步驟如上圖,具體實(shí)現(xiàn)可查閱項(xiàng)目代碼)

MifareUltraligh t數(shù)據(jù)格式:將 NFC 標(biāo)簽的存儲區(qū)域分為16個頁,每一個頁可以存儲4個字節(jié),一個可存儲64個字節(jié)(512位)。頁碼從0開始(0至15)。前4頁(0至3)存儲了NFC標(biāo)簽相關(guān)的信息(如NFC標(biāo)簽的序列號、控制位等)。從第5頁開始存儲實(shí)際的數(shù)據(jù)(4至15頁)。使用MifareUltralight.get 方法獲取 MifareUltralight 對象,然后調(diào)用MifareUltralight.connect 方法進(jìn)行連接,并使用MifareUltralight.writePage 方法每次寫入1頁(4個字節(jié))。

也可以使用 MifareUltralight.readPages 方法每次連續(xù)讀取 4 頁。如果讀取的頁的序號超過 15,則從頭開始讀。例如,從第 15 頁(序號為14)開始讀。readPages 方法會讀取 14、15、0、1頁的數(shù)據(jù)。

深入分析Android NFC技術(shù) android nfc開發(fā)

github 鏈接

項(xiàng)目源碼地址:
https://github.com/RickyYu/Nfc-Android

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI