针对M1类型的nfc读取扇区初步了解
本文于1455天之前发表,文中内容可能已经过时。
####NFC的一些理解
NFC的通信原理
- 工作频率为13.56MHZ
- 读取模式有被动和主动
具体表现和对比其他短距离通信,如以下表格:
NFC | 蓝牙 | 红外 | |
---|---|---|---|
网络类型 | 点对点 | 单点对多点 | 点对点 |
使用距离 | ≤0.1m | ≤10m | ≤1m |
建立时间 | < 0.1s | 6s | 0.5s |
安全性 | 具备, 硬件实现 | 具备,软件实现 | 不具备, 使用IRFM 时除外 |
通信模式 | 主动-主动/被动 | 主动-主动 | 主动-主动 |
成本 | 低 | 中 | 低 |
关于NFC在Android上的表现
- 首先手机必须具有NFC的功能
- 再次应用和相关页面要进行相关的配置
配置体现:
<!-- NFC权限声明 -->
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature
android:name="android.hardware.nfc"
android:required="true"/>
应用的页面 :intent-filter 启动模式为:android:launchMode=”singleTop”
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
</intent-filter>
主要浅显分析下M1类型的读写:
- 全名为:MifareClassic的射频卡
- 1K 16个扇区,每个扇区有4个块,每个块有16个字节数据
- 通过文档查询NFCA协议兼容MifareClassic协议
Android 读取M1大概的方法
//取出封装在intent中的TAG
Tag tagIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
boolean auth = false;
//读取TAG Tag类型代表着协议类型
MifareClassic mfc = MifareClassic.get(tagIntent);
try {
//Authenticate a sector with key A.
auth = mfc.authenticateSectorWithKeyA("Sector 扇区 ","密码");
if (auth) {
byte[] data = mfc.readBlock(“块数”);
} else {
//验证失败
}
mfc.close();
} catch (Exception e) {
e.printStackTrace();
}
Android 写入M1的大概方法
try {
Tag tagFromIntent = mIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareClassic mfc = MifareClassic.get(tagFromIntent);
mfc.connect();
boolean auth = false;
auth = mfc.authenticateSectorWithKeyA(1,des);
if (auth) {
mfc.writeBlock("块数", byte[] data);// 必须为16字节不够自己补0
mfc.close();
} else {
}
} catch (IOException e1) {
e1.printStackTrace();
}
在于获取NfcAdapter的EXTRA_TAG 拿取到NFC的协议类型,才能进行下一步的读取。MifareClassic