本文介紹一些進階的NFC專題,如多樣的NFC標籤技術、編寫NFC標籤、以及前台調度,前台調度允許在前台的應用程式優先調度Intent事件,即使還有其他的過濾同樣的Intent事件的應用程式存在。
Android所支援的NFC標籤技術
在使用NFC標籤和Android裝置來進行工作的時候,使用的讀寫NFC標籤上資料的主要格式是NDEF。當裝置掃描到帶有NDEF的資料時,Android會提供對訊息解析的支援,並在可能的時候,會以NdefMessage對象的形式來發送它。但是,有些情況下,裝置掃描到的NFC標籤沒有包含NDEF資料,或者該NDEF資料沒有被映射到MIME類型或URI。在這些情況下,你需要開啟跟NFC標籤的通訊,並用自己的協議(原始的位元組形式)來讀寫它。Android用android.nfc.tech包提供了對這些情況的一般性支援,這個包在下表1中介紹。你能夠使用getTechList()方法來判斷NFC標籤所支援的的技術,並且用android.nfc.tech提供的一個類來建立對應的TagTechnology對象。
表1.NFC標籤所支援的技術
類
介紹
TagTechnology
所有的NFC標籤技術類必須實現的介面。
NfcA
提供對NFC-A(ISO 14443-3A)屬性和I/O操作的訪問。
NfcB
提供對NFC-B(ISO 14443-3B)屬性和I/O操作的訪問。
NfcF
提供對NFC-F(ISO 6319-4)屬性和I/O操作的訪問。
NfcV
提供對NFC-V(ISO 15693)屬性和I/O操作的訪問。
IsoDep
提供對NFC-A(ISO 14443-4)屬性和I/O操作的訪問。
Ndef
提供對NDEF格式的NFC標籤上的NDEF資料和操作的訪問。
NdefFormatable
提供了對可以被NDEF格式化的NFC標籤的格式化操作。
表2.可選的NFC標籤所支援的技術
類
介紹
MifareClassic
如果Android裝置支援MIFARE,那麼它提供了對經典的MIFARE類型標籤屬性和I/O操作的訪問。
MifareUltralight
如果Android裝置支援MIFARE,那麼它提供了對超薄的MIFARE類型標籤屬性和I/O操作的訪問。
NFC標籤和ACTION_TECH_DISCOVERED類型的Intent協同工作
當裝置掃描到帶有NDEF資料的NFC標籤,但卻不能映射到MIME或URI時,NFC標籤調度系統就嘗試使用ACTION_TECH_DISCOVERED類型的Intent來啟動一個Activity。在被掃描到的NFC標籤上沒有NDEF資料時,也會使用ACTION_TECH_DISCOVERED類型的Intent。有了這種回退機制,如果調度系統不能夠幫你解析資料,那麼你就可以直接使用NFC標籤上資料來工作。基本步驟如下:
1. 給你希望處理的NFC標籤指定ACTION_TECH_DISCOVERED類型的Intent過濾器。更多資訊請看“NFC的Intent過濾”。通常,在NDEF訊息不能被映射到MIME類型或URI時,或者被掃描到的NFC標籤不包含NDEF資料時,NFC標籤調度系統會嘗試啟動一個ACTION_TECH_DISCOVERED類型的Intent。更多資訊,請看“NFC標籤調度系統”。
2. 應用程式接收到Intent對象時,從該Intent對象中擷取Tag對象:
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
3. 通過調用android.nfc.tech包中對應類的一個getFactory 方法,來擷取一個TagTechnology對象執行個體。在調用getFactory 方法之前,通過調用getTechList()方法來枚舉NFC標籤所支援的技術。例如,用下列方法從Tag對象中擷取MifareUltralight對象執行個體:
MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));