国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

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

2019-10-22 18:21:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

Android,NFC,nfc開(kāi)發(fā)

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

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

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

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

(2)仿真卡模式

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

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

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

Android,NFC,nfc開(kāi)發(fā)

二、Android 對(duì) NFC 的支持

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

NDEF 格式其實(shí)就類(lèi)似于硬盤(pán)的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)簽寫(xiě)入NDEF格式的數(shù)據(jù)。

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

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

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

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

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

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

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

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

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

Android,NFC,nfc開(kāi)發(fā)

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

Android,NFC,nfc開(kāi)發(fā)

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

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

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

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

1)獲取Tag對(duì)象

Android,NFC,nfc開(kāi)發(fā)

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

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

Android,NFC,nfc開(kāi)發(fā)

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

操作步驟:

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

Android,NFC,nfc開(kāi)發(fā)

Android,NFC,nfc開(kāi)發(fā)

Android,NFC,nfc開(kāi)發(fā)

四、NDEF 文本格式深度解析

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

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

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

2)可變的長(zhǎng)度類(lèi)型必須是NdefRecord.RTD_TEXT。

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

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

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

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

Android,NFC,nfc開(kāi)發(fā)

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

Android,NFC,nfc開(kāi)發(fā)

Android,NFC,nfc開(kāi)發(fā)

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

Android,NFC,nfc開(kāi)發(fā)

Android,NFC,nfc開(kāi)發(fā)

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

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

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

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

Android,NFC,nfc開(kāi)發(fā)

github 鏈接

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂平市| 鄄城县| 双峰县| 剑河县| 密山市| 大城县| 平罗县| 平和县| 贡嘎县| 北宁市| 改则县| 尼木县| 峨眉山市| 灵石县| 寿光市| 尤溪县| 湖口县| 峨山| 奎屯市| 讷河市| 陕西省| 宜都市| 蒲江县| 佛学| 会泽县| 玉环县| 普宁市| 忻州市| 祁门县| 南靖县| 青浦区| 桂阳县| 彭泽县| 健康| 特克斯县| 云林县| 微博| 花莲县| 岗巴县| 永德县| 同德县|