nfc 標籤調度和ndef數據處理


參考:
http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
NDEF NFC數據交換格式   可以參考nfc論壇提供的詳細說明


MIME 多用途的網際郵件擴充協議.設定某種擴展名的文件用一種應用程序來打
開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程
序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。




android api框架提供了nfc數據ndef的接受和發送,在支持nfc功能的android
設備上,主要有兩個用途:從nfc標籤讀取ndef數據;兩個android設備之間傳
輸數據。 
讀取NDEF數據:一個NFC標籤處理與標籤的調度系統,分析發現的NFC標籤,適當
地對數據進行分類,並啓動一個應用程序。在分類的數據中,要處理掃描NFC標籤
的應用程序可以聲明一個 intent filter來處理數據請求。


Android Beam功能允許通過物理設備傳輸NDEF消息到其它設備上,這種互動提供
了一個比其它無線技術更簡單的方法,如藍牙發送數據,因爲與NFC不需要發現
或配對,連接兩個設備時自動啓動。Android的傳輸是通過一系列的NFC API,
所以任何應用都可以在設備之間傳輸信息。例如,聯繫人,瀏覽器和YouTube應
用程序共享聯繫人,網頁,視頻與其他設備使用Android的Beam。




1.標籤調度系統


Android設備的NFC即使在屏幕鎖定的狀態下也可以處理標籤的請求,除非在NFC設備的
設置菜單中禁用。當Android設備發現了一個NFC標籤,根據標籤調度系統來選擇最合
適的應用來處理,而不是讓用戶來選擇什麼樣的應用來處理,因爲設備掃描NFC標籤時,
在很短的範圍內,很可能使用戶手動選擇活動將迫使他們遠離標籤和移動設備斷開連接。
每個應用程序應該選擇最合適的標籤過濾器來過濾nfc請求,儘量避免出現選擇框讓用戶
選擇應用程序來處理nfc請求。 


爲了幫助你實現這個目標,Android提供了一個特殊的標籤調度系統掃描NFC標籤並進行
分析、解析,並試圖找出適合的應用程序來處理。它通過: 


1.解析NFC標籤並計算出的MIME類型或一個URI,用於標識在標籤的數據有效載荷。
2.封裝的MIME類型或URI和有效載荷的意圖。前兩個步驟中描述NFC標籤如何被映射到MIME
類型和URI。
3.啓動活動的意圖。這時在應用中處理nfc請求。


硬件收到nfc請求,解析出標籤的類型---》封裝標籤類型到intent---》根據過濾器,
選擇合適的應用程序處理






NFC標籤如何被映射到MIME類型和URI


在你開始寫你的NFC應用,重要的是要了解不同類型的NFC標籤,標籤調度系統如何解析NFC標籤,
標籤調度系統的特殊工作,當它檢測NDEF消息。NFC標籤來在各種各樣的技術,還可以有許多不
同的方式對他們的數據寫入。Android有支持NDEF標準,這是由NFC論壇制定。


NDEF數據封裝內部消息(NdefMessage),它包含一個或多個記錄(NdefRecord)。每個NDEF記錄
必須很好地形成根據類型的記錄,你要創建的規範。Android也支持其它類型的標籤不包含NDEF數據,
你可以使用類在android.nfc.tech包。要了解有關這些技術的更多信息,請參見nfc高級部分。
這些其他類型的標籤的工作涉及編寫自己的協議棧與標籤進行通信,爲了便於開發和提供Android的
設備的最大支持,所以我們建議使用NDEF格式。 


注意: 要下載完整的的NDEF規格,NFC論壇規範下載網站,請參閱創建NDEF記錄如何構建NDEF記錄
的例子常見的類型。


現在你有一些NFC標籤的基礎,在下面的章節描述了更詳細的描述了Android如何處理格式化的NDEF標籤。
當Android設備掃描NFC標籤含有NDEF格式的數據,解析消息,並試圖找出數據的MIME類型或識別
的URI。要做到這一點,系統會讀取裏面的NdefMessage第一NdefRecord確定如何解析整個NDEF消息
(NDEF消息可以有多個NDEF記錄)。在一個NdefRecord必需包含以下字段:


3-bit TNF (Type Name Format)
Indicates how to interpret the variable length type field. Valid values are described 
in described in Table 1.
(主要根據這個byte解析NdefRecord的類型)


Variable length type
Describes the type of the record. If using TNF_WELL_KNOWN, use this field to specify 
the Record Type Definition (RTD). Valid RTD values are described in Table 2.
(描述NdefRecord類型)


Variable length ID
A unique identifier for the record. This field is not used often, but if you need to 
uniquely identify a tag, you can create an ID for it.
(NdefRecord唯一標示符)
Variable length payload
The actual data payload that you want to read or write. An NDEF message can contain 
multiple NDEF records, so don't assume the full payload is in the first NDEF record 
of the NDEF message.
(有效的數據) 


標籤調度系統使用TNF和類型字段嘗試映射NDEF消息的MIME類型,或URI。如果成功,它封裝了該信息,
裏面包含一個ACTION_NDEF_DISCOVERED的意圖與實際載荷。但是,也有情況下,標籤調度系統在第一
個NDEF記錄不能確定類型。這種情況發生時,NDEF數據不能被映射爲MIME類型或URI,或NFC標籤不包
含NDEF數據。在這種情況下,標籤對象,該對象具有標記的技術的信息和有效載荷封裝的
ACTION_TECH_DISCOVERED意圖,而不是內部包含的意圖。


表1描述瞭如何標記調度系統地圖TNF和類型字段設置爲MIME類型或URIs。還介紹TNFs不能映射到一個
MIME類型或URI。在這些情況下,標籤調度系統啓動ACTION_TECH_DISCOVERED。 
例如,如果標籤調度系統遇到一個記錄類型TNF_ABSOLUTE_URI,該記錄的可變長度類型字段映射到一個URI。
標籤調度系統在數據字段中的的ACTION_NDEF_DISCOVERED意圖以及關於標籤和其它信息,例如有效載荷封裝該URI 。
另一方面,如果遇到的記錄類型TNF_UNKNOWN,它創建一個意圖封裝標籤。




2.應用如何調度NFC標籤


當標籤調度系統完成創建意圖封裝NFC標籤及其識別信息,發送的意圖給感興趣的應用程序過濾器的意圖。
如果有一個以上的應用程序可以處理這個意圖,活動選擇,使用戶可以選擇的活動。
標籤調度系統定義了三個意圖,最高到最低優先級的順序列出:


ACTION_NDEF_DISCOVERED:包含NDEF負載的標籤被掃描時,這個意圖是用來啓動一個活動,是一個公認的類型。
這是最高優先級的意圖,標籤調度系統試圖啓動一個活動,在任何其他意圖中,這個意圖最可能被啓動。
ACTION_TECH_DISCOVERED:如果沒有活動註冊來處理ACTION_NDEF_DISCOVERED 意圖,標籤調度系統試圖啓動
一個應用程序,這個意圖。這個意圖也直接啓動(不啓動先ACTION_NDEF_DISCOVERED)如果標籤被掃描包含NDEF
數據不能被映射到一個MIME類型或URI,或者如果標籤不包含NDEF數據,或者是其它標籤標準。
ACTION_TAG_DISCOVERED:此意圖是開始,如果沒有活動處理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED的
意圖。


標籤調度系統的基本工作原理如下: 
嘗試啓動一個活動的意圖時所建立的標籤調度系統解析(無論是ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED
的 NFC標籤 )。
如果沒有這一意圖過濾器的活動,嘗試啓動一個活動的下一個優先級最低的意圖(無論是ACTION_TECH_DISCOVERED
或ACTION_TAG_DISCOVERED的),直到應用程序過濾到這個意圖。標籤調度系統嘗試所有可能的意圖,
如果沒有應用程序過濾器的任何意圖,什麼也不做。




只要有可能,應該使用NDEF消息和ACTION_NDEF_DISCOVERED的意圖的工作,因爲它在三個意圖中有最高的優先級。
避免了選擇框的出現,可以給用戶更好的體驗。






















 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章