android 近场通信,Android NFC近场通信03----读写MifareClassic卡(示例代码)
Android NFC近场通信02----读写MifareClassic卡
一.MifareClassic卡 相关
一般来说,给予MifareClassic的射频卡,一般内存大小有3种:
1K: 16个分区(sector)。每一个分区4个块(block)。每一个块(block) 16个byte数据
2K: 32个分区,每一个分区4个块(block),每一个块(block) 16个byte数据
4K:64个分区,每一个分区4个块(block)。每一个块(block) 16个byte数据
对于全部基于MifareClassic的卡来说,每一个区最后一个块叫Trailer,16个byte, 主要来存放读写该区的key,能够有A,B两个KEY,每一个key长6byte,默认的key通常是FF 或 0。最后一个块的内存结构例如以下:
Block 0 Data 16bytes
Block 1 Data 16 bytes
Block 2 Data 16 bytes
Block 3 Trailer 16 bytes
Trailer:
Key A: 6 bytes
Access Conditions: 4 bytes
Key B: 6 bytes
M1卡分为16个扇区,每一个扇区由4块(块0、块1、块2、块3)组成。(我们也将16个扇区的64个块按绝对地址编号为0~63。)存贮结构如右表所看到的
扇
区
0
块0
数据块
0
块1
数据块
1
块2
数据块
2
块3
passwordA存取控制 passwordB
数据块
3
扇
区
1
块0
数据块
4
块1
数据块
5
块2
数据块
6
块3
passwordA存取控制 passwordB
数据块
7
:
:
:
扇
区
15
块0
数据块
60
块1
数据块
61
块2
数据块
62
块3
passwordA存取控制 passwordB
数据块
63
第0扇区的块0(即绝对地址0块),它用于存放厂商代码。已经固化。不可更改。
每一个扇区的块0、块1、块2为数据块。可用于存贮数据。
每一个扇区的块3为控制块,包含了passwordA、存取控制、passwordB。
详细结构例如以下:
A1A2 A3 A4 A5 FF 07 8069 B0 B1 B2 B3 B4 B5
passwordA(6字节) 存取控制(4字节)
passwordB(6字节)
每一个扇区的password和存取控制都是独立的,能够依据实际须要设定各自的password及存取控制;
存取控制为4个字节,共32位。扇区中的每一个块(包含数据块和控制块)的存取条件是由password和存取控制共同决定的。工作原理:
读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路。其频率与讯写器发射的频率同样,在电磁波的激励下,LC谐振电路产生共振。从而使电容内有了电荷,在这个电容的还有一端。接有一个单向导通的电子泵,将电容内的电荷送到还有一个电容内储存,当所积累的电荷达到2V时。此电容可做为电源为其他电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
二.读取数据
//tag 就是在上一篇中onNewIntent中获取的tag
MifareClassic mc = MifareClassic.get(tag);
short startAddress = 0;
short endAddress = 5;
byte[] data = new byte[(endAddress - startAddress + 1 ) * ByteCountPerBlock];
try {
mc.connect();for (short i = startAddress; i <= endAddress; i++ ,time++) {
boolean auth = false;
short sectorAddress = getSectorAddress(i);
auth = mc.authenticateSectorWithKeyA(sectorAddress, MifareClassic.KEY_DEFAULT);
if (auth){
//the last block of the sector is used for KeyA and KeyB cannot be overwritted
short readAddress = (short)(sectorAddress == 0 ? i : i + sectorAddress);
byte[] response = mc.readBlock(readAddress);
CombineByteArray(data, response, time * ByteCountPerBlock);
}
else{
throw new NfcException(NfcErrorCode.TemporaryError,
"Authorization Error.");
}
}
mc.close();
}
catch (NfcException ne) {
throw ne;
}
catch (IOException e) {
throw new NfcException(NfcErrorCode.TemporaryError,
"Get response, what it is not successfully.", e);
}
finally
{
try {
mc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}三.写数据
//tag 就是在上一篇中onNewIntent中获取的tag
MifareClassic mc = MifareClassic.get(tag);
try {
mc.connect();
boolean auth = false;
short sectorAddress = 0
auth = mc.authenticateSectorWithKeyA(sectorAddress,
MifareClassic.KEY_DEFAULT);
if (auth) {
//the last block of the sector is used for KeyA and KeyB cannot be overwritted
mc.writeBlock(readAddress, dataTemp);
mc.close();
}
}finally
{
try {
mc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
android 近场通信,Android NFC近场通信03----读写MifareClassic卡(示例代码)相关推荐
- Android nfc模块读写MifareClassic卡50
http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...
- android 代码 卸载app,Android在一个app中安装并卸载另一个app的示例代码
Android在一个app中安装并卸载另一个app 1.在app→src→main下新建文件夹asserts,将准备安装的apk文件放在asserts内 2.在app→src→main→res下新建文 ...
- android studio导入jar包和so库,Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库(示例代码)...
第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...
- android有道翻译代码,Android使用有道翻译API实如今线翻译功能(示例代码)
在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:有道翻译API申请地址. 申请之后就会得到一个keyfrom和一个ke ...
- android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...
1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...
- android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...
最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...
- 百度 android geocoding,百度地图经纬度批量查找功能XGeocoding使用手册(示例代码)
<XGeocoding使用手册> 1.下载XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2.解压XGeocoding_v ...
- android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信(示例代码)
以下方法均测试成功 一.用命令模拟 (一).模拟来电 1.打开命令行cmd,输入telnet 回车. 2.然后输入 o localhost 5554 回车,连到Emulator上. 3.输入gsm c ...
- android仿喜马拉雅APP状态栏,ReactNative+TypeScript仿喜马拉雅开发App(示例代码)
ReactNative+TypeScript仿喜马拉雅开发App 融合RN的跨平台能力+TS的全新开发体验 使用RN + TS开发听书App,从需求分析,到功能实现,一步步带领大家完成功能,学会如何解 ...
最新文章
- mybatis自动生成代码工具
- 基于android的家庭财务通 .apk,毕业论文(设计)基于Android的家庭财务管家的设计与实现.doc...
- hdfs通过接口退出安全模式_Hadoop之HDFS简介
- “德国屈臣氏”来天猫!欧洲3000家门店,优质低价背后有啥秘密
- MySQL学习笔记(十二)—— MySQL的命令集(2)
- SAP Spartacus Popover Directive 构造函数的用途分析
- Android系统JNI的实现方式
- php中__autoload()方法详解
- 164. Maximum Gap
- HDU/HDOJ 2612 Find a way 双向BFS
- 计算机硬件组成 pdf,计算机硬件的组成..pdf
- PostgreSQL 9.5 pg_dump新特性 你是我的眼
- 大数据之_数据采集Flume_Flume了解_学习内容介绍---Flume工作笔记002
- android fastboot原理,FastBoot使用一
- NVIDIA下载老版本驱动/CUDA/Video Codec SDK的链接
- ssm项目搭建(tomcat配置)详解
- Android 自定义和可下载字体
- mysql版本号xx.xx.xx类型字段排序问题解决
- mysql的sid_修改数据库的SID
- 关于iphone开发前期环境搭建过程中需要注意的一些要点
热门文章
- python太阳代码_python实现实时太阳跟踪
- 联想网盘:看得见的云计算
- 编译安装PHP,解决问题 Don't know how to define struct flock on this system, set --enable-opcache=no
- 非科班、无实习、拿到腾讯华为提前批offer,C++学习路线及项目分享
- 基于ssm的零食商城的设计与实现
- SSI-DDI:基于子结构相互作用的药物-药物反应预测
- mysql数据库原理分析
- java 创建gbase_GBase8s + MyBatis 操作示例
- 变身小小科学家 南瓜科学让孩子爱上实验
- 语音分类任务(基于UrbanSound8K数据集)