一、概述:NFC像藍牙、wifi是一種通信技術,
牛逼1:通信的一方可以通過磁場供電,無源
牛逼2:靠的近,不用搜、不用手工連接、不用輸入密碼,
二、難點:協議,這么多標準,一上來就說這個,完全沒必要,
所有通信:就是連接,發與收,斷開,就像Linux萬物皆檔案,
我就簡單協議分類:
1.標準NDEF(主要),
2.非標準NDEF:系統目前支持的Tag TECH:表1和表2,
表 1. 支持的標簽技術
| 類 | 說明 |
|---|---|
| TagTechnology | 這是所有標簽技術類都必須實作的介面, |
| NfcA | 提供對 NFC-A (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 格式的 NFC 標簽上的 NDEF 資料和操作的訪問權限, |
| NdefFormatable | 為可設定為 NDEF 格式的標簽提供格式化操作, |
表 2. 可選擇支持的標簽技術
| 類 | 說明 |
|---|---|
| MifareClassic | 提供對 MIFARE Classic 屬性和 I/O 操作的訪問權限(如果此 Android 設備支持 MIFARE), |
| MifareUltralight | 提供對 MIFARE Ultralight 屬性和 I/O 操作的訪問權限(如果此 Android 設備支持 MIFARE), |
三、作業模式:讀卡器、仿真卡、點對點,比如手機可以讀ic卡,當卡使用,與其它手機傳檔案,
四、卡分類:IC卡、ID卡(只存ID)、M1卡和CPU卡,
五、標簽調度系統:即刷卡自動啟動對應的APP處理,

六、開發步驟:
1.獲取NFC權限/添加Intent過濾器
2.獲取NFC配接器
3.捕獲NFC Intent,intent.getAction()可判斷是否是NDEF?具體看下面原始碼
是NDEF處理:不懂就一步步除錯決議,物件里包含了所有資訊,
非NDEF處理:
4.處理該Intent(獲取資訊Tag)
5.判斷標簽型別,并執行相關操作,核心函式: get(Tag tag)得到物件 ,connect()連接,transceive(byte[] data)發送接收,close()斷開,
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("NFCTAG", intent.getAction()); //刷卡的資訊都在這里
try {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMessages != null) {
NdefMessage[] messages = new NdefMessage[rawMessages.length];
for (int i = 0; i < rawMessages.length; i++) {
messages[i] = (NdefMessage) rawMessages[i];
}
// Process the messages array.
//...
}
} else {
final Parcelable rawMessage = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (rawMessage != null) {
final Tag tag = (Tag) rawMessage; //ID and Supported tag technologies is here
Log.d("NFCTAG", tag.toString());
final IsoDep isodep = IsoDep.get(tag); //就可以根據支持的型別來收發資料了
if (isodep != null) {
isodep.connect();
byte[] send_hex=new byte[]{0x00, (byte) 0xA4,0x04,0x00,0x0E,0x32}; //發的命令得卡支持才有回應,我這刪幾個位元組
byte[] recv_buffer = isodep.transceive(send_hex);
String recv = "";
for (int i = 0; i < recv_buffer.length; i++)
recv += String.format("%02X ", recv_buffer[i]);
Log.d("NFCTAG", "(" + recv_buffer.length + ")" + recv);
isodep.close();
}
}
}
} catch (Exception e) {
Log.d("NFCTAG", "error " + e);
}
}

簡單吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/303072.html
標籤:其他
上一篇:失之毫厘,謬以千里——Xcode編譯App時一個極難發現的陷阱!
下一篇:adb常見命令與monkey
