Android NFC介紹

NFC是什麼?
NFC是Near Field Communication縮寫,即近距離無線通訊技術。NFC採用主動和被動兩種通信模式。手機NFC支持三種工作模式:讀/寫標籤模式,點到點模式,模擬卡片模式。
重要的包
重要的兩個包:android.nfc和android.nfc.tech包
重要的類
android.nfc包下有四個:
NfcManager:管理所有NFC Adapter,但由於大部分Android設備只支持一個NFC Adapter,所以一般直接用getDefaultAapater方法來獲取系統支持的Adapter。

public NfcAdapter getDefaultAdapter() {
	return mAdapter;
 }

NfcAdapter:本設備的NFC adapter,可以定義Intent來請求將系統檢測到tags的提醒發送到你的Activity,並提供方法去註冊前臺tag提醒發佈和前臺NDEF推送。(即實現通信)
NdefMessage:NDEF是NFC論壇定義的數據結構,用來有效的存數據到標籤中,如文本,URL,和其他MIME類型。一個NdefMessage扮演一個容器,這個容器存那些發送和讀到的數據。一個NdefMessage對象包含0或多個NdefRecord,每個NDEF record有一個類型,比如文本,URL,或其他MIME數據。在NDEFMessage裏的第一個NfcRecord的類型用來發送tag到一個android設備上的activity。
Tag:標示一個被動的NFC目標,比如tag,card,鑰匙掛扣,甚至是一個電話模擬的NFC卡。可提供對標籤的各種操作方法。
android.nfc.tech包
android.nfc.tech包含那些對tag查詢屬性和進行I/O操作的類。這些類分別標示一個tag支持的不同的NFC技術標準。
TagTechnology: 這個接口是下面所有tag technology類必須實現的。
NfcA: 支持ISO 14443-3A 標準的屬性和I/O操作。
NfcB:NFC-B (ISO 14443-3B)的屬性和I/O操作。
NfcF:NFC-F (JIS 6319-4)的屬性和I/O操作。
NfcV: NFC-V (ISO 15693)的屬性和I/O操作。
IsoDep:ISO-DEP (ISO 14443-4)的屬性和I/O操作。
Ndef:對支持NDEF格式的標籤進行讀寫操作。
NdefFormatable: 對那些可以被格式化成NDEF格式的tag提供一個格式化的操作。
MifareClassic: 如果android設備支持MIFARE,提供對MIFARE Classic目標的屬性和I/O操作。
MifareUltralight: 如果android設備支持MIFARE,提供對MIFARE Ultralight目標的屬性和I/O操作。
檢測到標籤後在Activity中的處理流程

  1. 在onCreate()中獲取NfcAdapter對象;
    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    2.在onNewIntent()中獲取Tag對象或者NdefMessage信息;
    獲取Tag對象:
    Tag tag = intent.getParcelableExra(NfcAdapter.EXTRA_TAG);
    獲取NdefMessage信息:
    Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
    3.也可以通過Tag創建Ndef對象等,以實現標籤的屬性和I/O操作。
    Ndef ndef = Ndef.get(tag);
    NDEF格式標籤的讀取流程
  2. 在onCreate()中獲取NfcAdapter對象;
    2.在onNewIntent()中判斷是否爲NDEF格式標籤(ACTION_NDEF_DISCOVERED),若是則獲取NdefMessage
    信息;(需要強制轉換成NdefMessage對象)
    Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
    3.對NdefMessage對象進行解析,獲取相關的文本信息或Uri等。

NDEF格式標籤的寫入流程

  1. 在onCreate()中獲取NfcAdapter對象;
    2.在onNewIntent()中獲取Tag對象;
    Tag tag = intent.getParcelableExra(NfcAdapter.EXTRA_TAG);
    3.通過Tag創建Ndef對象;
    Ndef ndef = Ndef.get(tag);
    4.將文本等數據封裝成NdefMessage;
    5.判斷是否爲NDEF格式標籤,
    若是NDEF格式:
    (1)允許進行標籤操作:ndef.connect();
    (2) 調用ndef.writeNdefMessage(NdefMessage)方法寫入。

若非NDEF格式:
(1)NdefFromatable format = NdefFromatable.get();
(2)允許進行標籤操作:format.connect();
(3)調用format.format(NdefMessage)方法寫入。

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