NFC 標籤調度系統(Intent發佈)

NFC Intent發佈系統

Intent發佈系統也被稱爲標籤調度系統,調度系統定義了三種類型的action,見下表:

ACTIVITY_INTENT_ACTION 類型 作用 優先級
ACTION_NDEF_DISCOVERED 標籤中含有NDEF數據且爲公認類型
ACTION_TECH_DISCOVERED 標籤中沒有NDEF數據卻是已定義的標籤技術
ACTION_TAG_DISCOVERED 前兩個action都沒有啓動,則啓動這個

所以標籤的上報根據標籤中數據的不同而採用不同的action,大致流程如下圖:
在這裏插入圖片描述

唯一需要注意的是在ACTION_NDEF_DISCOVERED上報時還需要考慮AAR,NFC AAR的實現可以參考其他文章,這裏就不多贅述。

1 ACTION_NDEF_DISCOVERED

如果Application想過濾ACTION_NDEF_DISCOVERED的Intent,則其需要在你apk的清單文件AndroidManifest.xml中添加上intent-filter分過濾條件,一般的過濾條件設置如下:
在這裏插入圖片描述
條件data下的內容根據Application感興趣的標籤而定,具體可參考《Professional NFC Application Development for Android.pdf》,這本書中做了比較詳細的說明。

2 ACTION_TECH_DISCOVERED

Application如果對ACTION_TECH_DISCOVERED的Intent感興趣,則需要在apk的清單文件中加入如下格式的過濾條件:
在這裏插入圖片描述
在上面的基本格式中,meta-data中包含這樣一條語句:android:resource="@xml/nfc_tech_list",這是一個XML的資源文件,該文件在過濾ACTION_TECH_DISCOVERED的Intent時是必須創建的。它指定了該apk支持的標籤技術,只有你在XML中定義的標籤技術是上報的Tag支持的標籤技術的一個子集,這樣你的Activity才能被系統過濾出來。

Nfc_tech_list是資源文件的文件名,可以根據自己的文件名而改動。但是文件的存放路徑必須是 /res/xml/ 文件夾下,基本格式如下:
在這裏插入圖片描述
以上所列出的標籤技術是當前標籤支持的所有技術,Application可以根據自己的需要自由組合你的tech_list。也可以指定多個tech_list集合,每一個tech_list都認爲是獨立的,所以在匹配過程中,只要有一個tech_list匹配成功就認爲該Activity符合ACTION_TECH_DISCOVERED的Intent過濾條件。多個tech_list集合的格式如下:
在這裏插入圖片描述

3 ACTION_TAG_DISCOVERED

應用如果想過濾ACTION_TAG_DISCOVERED的Intent,同樣需要在清單文件中加入過濾條件,這樣在其他apk沒有過濾ACTION_NDEF_DISCOVERED和ACTION_TECH_DISCOVERED的Intent時,ACTION_TAG_DISCOVERED就會啓動。配置格式如下:
在這裏插入圖片描述這樣就把三種不同的action的Intent都做了比較詳細的說明,接下來讓我們看下這部分在android系統標籤上報中的時序圖:
在這裏插入圖片描述

Activity被啓動後一般會在onResume()中獲取到Intent,並從中讀取標籤的Tag對象和NDEF數據,這樣應用就可以基於獲取到的數據進行NFC數據操作。

更多互聯互通技術,歡迎關注微信公衆號:Connectivity
在這裏插入圖片描述

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