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