NFC reader ( ISO 15693 ) NFC相关技术详解(附源代码)
NFC reader ( ISO 15693 ) NFC相關技術詳解
本文主要介紹Android系統中,使用ISO 15693協議讀取NDEF message的相關技術,并結源代碼進行講解
源代碼地址:https://github.com/nikolajohn/Reader_of_NFCv
概述
本文主要介紹在Android框架下NFC檢測相關的技術
以及如何調用NFC相關的API
從而完成NDEF message格式的NFC數據
關于NDEF Message,主要存在以下兩種應用場景:
- 從NFC tag中讀取NDEF數據
- 使用Android Beam處理NDEF數據
在Android系統中,tag dispatch system(一些書里對這個強行中文翻譯,但樓主覺得中文容易引起歧義,因此保留英文)
用于分析手機NFC天線檢測到的NFC tag
然后對接收到的數據進行簡單的分類,并將分類好的數據發給需要的應用程序
如果用戶的應用程序需要去處理被掃描的NFC tag ,我們需要在intent filter里面進行聲明
就像這樣:
至于這里為什么要寫這個
android.nfc.action.TECH_DISCOVERED我們后面會提到
這篇文章主要寫NDEF Message的處理,Android Beam方面的內容,樓主以后有機會再寫
Tag dispatch system
只要設備的屏幕是點亮的,Android系統就會一直搜索NFC tag,除非系統設置里面禁用了NFC,或者設備沒有NFC功能
當Android設備發現了NFC tag后,最希望的操作是有合適的activity去處理intent
而非讓用戶去選擇,我用哪個應用程序去處理讀取到的NFC tag(如果讓用戶選擇就會用到Activity Chooser)
為什么這么說呢?
因為設備掃描NFC tag時,往往設備和NFC是貼得很近的
此時如果讓用戶去選擇一個應用程序,很可能會導致連接的中斷
為了避免這樣的情況發生
Android的tag dispatch system完成了對檢測到的NFC tag進行掃描、解析以及嘗試定位最合適的應用程序的工作
為什么說是嘗試呢?因為有可能出現沒有最合適的應用程序來處理的情況,這時候就要用到file chooser了
tag dispatch system主要做下面這幾件事:
1. 解析NFC tag,并找出能夠指出payload的數據類型的MIME type或者URI,關于payload的介紹下面會講到
2. 將找到的MIME type或者URI結合payload,一起打包封裝進intent
3. 打開一個可以處理這個intent的activity
下面詳細地介紹這個過程
NDEF
首先我們介紹一下NFC tag的種類,其實NFC tag可以分為很多種,有很多的技術可以完成對NFC tag進行讀取和寫入
在這些NFC相關的技術中,最為常用的還是NFC Forum指定的NDEF協議
NFC Forum是一個制定NFC協議的組織,官網如下:
https://nfc-forum.org/
那么NDEF協議是什么意思呢?
簡單地說,就是把所有的NFC數據都都放到一個新的數據結構里,叫做NDEF message
這個NDEF message可以包含一條或多條NDEF record
每條NDEF record都必須嚴格按照指定的規范來生成
Android也支持其他種類的NFC數據,要處理這些類型的NFC tag,需要自己去寫基于底層的協議棧
這個如果有需求可以留言,樓主以后寫,這篇文章主要講NDEF格式的NFC數據
完整的NDEF協議,可以在下面這個地址找到:
https://nfc-forum.org/our-work/specifications-and-application-documents/
不過我們不需要了解得特別細致,把這篇文章里的東西看懂了就差不多了
NFC tag映射到MIME type或URI
當Android設備掃描到含有NDEF格式數據的NFC標簽時
tag dispatch system將會解析NDEF message,然后嘗試找出數據的MIME type或URI
那么tag dispatch system具體是如何做到的呢?
其實很簡單,tag dispatch system會讀取NDEF message中的第一條NDEFrecord
通過從第一條NDEFrecord中獲取的信息
決定tag dispatch system如何去解釋整個的NDEF message
規范的第一條NDEF record應該包含以下信息:
?
總結
以上是生活随笔為你收集整理的NFC reader ( ISO 15693 ) NFC相关技术详解(附源代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse Memory Analy
- 下一篇: LiveQing直播点播存储流媒体服务-