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

NFC Intent發佈系統

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


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


所以標籤的上報根據標籤中數據的不同而採用不同的action,大致流程如下圖:

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

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

1 ACTION_NDEF_DISCOVERED

如果Application想過濾ACTION_NDEF_DISCOVERED的Intent,則其需要在你apk的清單文件AndroidManifest.xml中添加上intent-filter分過濾條件,一般的過濾條件設置如下:

<code><activity>



<intent-filter>

<action>

<category>

<data>
... />

/<data>/<intent-filter>

...

/<activity>/<code>

過濾條件data下的內容根據Application感興趣的標籤而定,具體可參考《Professional NFC Application Development for Android.pdf》,這本書中做了比較詳細的說明。

2 ACTION_TECH_DISCOVERED

Application如果對ACTION_TECH_DISCOVERED的Intent感興趣,則需要在apk的清單文件中加入如下格式的過濾條件:

<code><activity>

...


<intent-filter>

<action>

/<intent-filter>

android:resource="@xml/nfc_tech_list" />

...

/<meta-data>/<activity>/<code>

在上面的基本格式中,meta-data中包含這樣一條語句:android:resource="@xml/nfc_tech_list",這是一個XML的資源文件,該文件在過濾ACTION_TECH_DISCOVERED的Intent時是必須創建的。它指定了該apk支持的標籤技術,只有你在XML中定義的標籤技術是上報的Tag支持的標籤技術的一個子集,這樣你的Activity才能被系統過濾出來。

Nfc_tech_list是資源文件的文件名,可以根據自己的文件名而改動。但是文件的存放路徑必須是 /res/xml/ 文件夾下,基本格式如下:

<code><resources>

<tech-list>

<tech>android.nfc.tech.IsoDep/<tech>

<tech>android.nfc.tech.NfcA/<tech>

<tech>android.nfc.tech.NfcB/<tech>

<tech>android.nfc.tech.NfcF/<tech>

<tech>android.nfc.tech.NfcV/<tech>

<tech>android.nfc.tech.Ndef/<tech>

<tech>android.nfc.tech.NdefFormatable/<tech>

<tech>android.nfc.tech.MifareClassic/<tech>

<tech>android.nfc.tech.MifareUltralight/<tech>

<tech>android.nfc.tech.NfcBarcode/<tech>

/<tech-list>

/<resources>/<code>

以上所列出的標籤技術是當前標籤支持的所有技術,Application可以根據自己的需要自由組合你的tech_list。也可以指定多個tech_list集合,每一個tech_list都認為是獨立的,所以在匹配過程中,只要有一個tech_list匹配成功就認為該Activity符合ACTION_TECH_DISCOVERED的Intent過濾條件。多個tech_list集合的格式如下:

<code><resources>

<tech-list>

<tech>android.nfc.tech.NfcB/<tech>

<tech>android.nfc.tech.Ndef/<tech>

/<tech-list>

/<resources>

<resources>

<tech-list>

<tech>android.nfc.tech.MifareClassic/<tech>

<tech>android.nfc.tech.NfcA/<tech>

/<tech-list>

/<resources>/<code>

3 ACTION_TAG_DISCOVERED

應用如果想過濾ACTION_TAG_DISCOVERED的Intent,同樣需要在清單文件中加入過濾條件,這樣在其他apk沒有過濾ACTION_NDEF_DISCOVERED和ACTION_TECH_DISCOVERED的Intent時,ACTION_TAG_DISCOVERED就會啟動。配置格式如下:

<code><activity>

...

<intent-filter>

<action>

/<intent-filter>

...

/<activity>/<code>


三種不同的action的Intent都有了比較詳細的說明,接下來讓我們看下這部分在android系統標籤上報中的時序圖:

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

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


分享到:


相關文章: