Android读写NFC
2016-05-27 13:49
591 查看
NFC卡种类很多,NFC读写芯片PN547可以支持格式:
Android SDK API已经有封装好的接口
14443和15693区别在于传输范围,15693传输距离更远。
14443A标签卡
MifareClass:
标准卡
MifareUltralight:
这类卡相对较小,不加密,成本也低,只有几百字节大小。
15693标签卡
NfcV
8字节UID,最后一字节固定为0xE0,需要发送写的命令串才能读。
命令列表,命令格式:标识 + 命令 + 参数 + 数据 + 校验
示例代码以cmd:0x20为例
开始写程序:
加入NFC权限:
支持NFC类型:
应用消息过滤器:
当NFC靠近时,系统组件检测到NFC发送Intent,这时候应用接收到消息后启动。
Java代码:
MifareClassic读代码
分为几个扇区,每个扇区有几个block
MifareUltralight代码
分为几个page,每个page大小是4字节。
readPage接口一次读4个页,也就是16字节。
NfcV(15693)代码
发送读命令,等待接收返回,命令格式 flag + cmd + para + crc,crc自动计算,我们不用理会。ID号要作为数据传入。
示例读取第1块区域数据
Android SDK API已经有封装好的接口
http://www.android-doc.com/reference/android/nfc/tech/package-summary.html
14443和15693区别在于传输范围,15693传输距离更远。
14443A标签卡
MifareClass:
标准卡
MifareUltralight:
这类卡相对较小,不加密,成本也低,只有几百字节大小。
15693标签卡
NfcV
8字节UID,最后一字节固定为0xE0,需要发送写的命令串才能读。
命令列表,命令格式:标识 + 命令 + 参数 + 数据 + 校验
示例代码以cmd:0x20为例
开始写程序:
加入NFC权限:
<uses-permission android:name="android.permission.NFC" />
支持NFC类型:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.MifareClassic</tech> </tech-list> <tech-list> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcV</tech> </tech-list> </resources> />
应用消息过滤器:
<intent-filter > <action android:name="android.nfc.action.TECH_DISCOVERED"/> </intent-filter>
当NFC靠近时,系统组件检测到NFC发送Intent,这时候应用接收到消息后启动。
Java代码:
MifareClassic读代码
分为几个扇区,每个扇区有几个block
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); MifareClassic mifare = MifareClassic.get(tagFromIntent); mifare.connect(); int type = mifare.getType(); Count = mifare.getBlockCountInSector(0); bIndex = mifare.sectorToBlock(0); byte[] data = mifare.readBlock(bIndex);//可以读bCount次 bIndex++;
MifareUltralight代码
分为几个page,每个page大小是4字节。
readPage接口一次读4个页,也就是16字节。
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); MifareUltralight mifare = MifareUltralight.get(tagFromIntent); mifare.connect(); byte data [] = mifare.readPages(16 * i);//偏移
NfcV(15693)代码
发送读命令,等待接收返回,命令格式 flag + cmd + para + crc,crc自动计算,我们不用理会。ID号要作为数据传入。
示例读取第1块区域数据
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); NfcV nv = NfcV.get(tagFromIntent); nv.connect(); byte[] ID = nv.getTag().getId(); byte[] cmd = new byte[11]; cmd[1] = (byte) 0x20; // command for (int i = 0; i < ID.length; i++) { cmd[i + 2] = ID[i]; } cmd[10] = 1;//第一块区域数据 byte[] data = nv.transceive(cmd);
相关文章推荐
- Android 传感器的使用
- 从Android运行时出发,打造我们的脱壳神器
- TextView部分文字变色、可点击。(微博话题 变色、点击)
- android 音乐播放工具类MediaPlayer
- Android传感器用法
- 解决AndroidStudio Cannot run program "git"(in directory) "F;\GitHubProiject.XXX" CreateProcess error=2
- Android按钮的四种点击事件
- AndroidStudio运行编译慢的提速方法
- Android使用源码中隐藏的API
- 通过回调在fragment中获取activity的触摸事件
- 静态代理,动态代理---笔记
- android studio快捷键
- 10分钟教你学会三级缓存
- 从头学android_Pull解析器解析xml文件
- android弹出框之Dialog
- [Android进阶]Java、Android 内存泄漏总结
- Android图片加载框架 Universal-Image-Loader 妙用
- Android中使用Handler造成内存泄露的分析和解决
- Android studio常见操作
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题