如何开发可通过NFC/RFID读卡器读取标签的Android毕设应用
Android NFC/RFID标签读取应用开发全流程方案
一、前期硬件适配准备
开发前先确认你要适配的RFID频段、读卡器类型,分两种场景处理:
- 若你要读取的是13.56MHz频段的RFID标签(比如常见的Mifare卡、NFC标签),直接用Android设备自带的NFC功能即可开发,无需额外外接读卡器
- 若你要读取的是超高频、低频等手机NFC不支持的频段,需要采购对应外接读卡器(USB/蓝牙接口均可),找商家索要对应的Android开发SDK与通信协议文档,这部分没有通用标准,完全以厂商提供的资料为准
二、应用与读卡器的连接实现
2.1 用手机自带NFC的连接逻辑
- 首先在
AndroidManifest.xml中添加权限声明:
<!-- NFC权限 --> <uses-permission android:name="android.permission.NFC" /> <!-- 声明应用需要NFC硬件,上架应用市场时会过滤不支持NFC的设备 --> <uses-feature android:name="android.hardware.nfc" android:required="true" />
- 在首页Activity中初始化NFC适配器,判断设备是否支持NFC、是否已开启NFC功能
- 配置前台分发机制,重写
onNewIntent方法捕获标签扫描事件,避免被其他NFC应用抢响应,示例代码如下:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 捕获到NFC标签扫描事件 if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // 后续基于Tag对象读取标签数据 } }
2.2 外接读卡器的连接逻辑
- USB读卡器:在清单文件中注册USB设备连接广播,动态申请USB访问权限,拿到
UsbDevice、UsbInterface实例后,通过UsbDeviceConnection和厂商给定的指令集收发数据即可 - 蓝牙读卡器:申请蓝牙权限后搜索配对目标读卡器设备,建立串口通信的
BluetoothSocket连接,按照厂商协议发送读卡指令即可
重点提示:外接读卡器优先用厂商提供的封装好的SDK,不要自己手动解析通信协议,能节省90%的适配时间
三、标签数据读取逻辑实现
- 读取标签唯一ID:用自带NFC的场景直接调用
tag.getId()就能拿到字节数组,转成十六进制字符串就是标签的唯一UID - 读取标签存储区数据:如果是Mifare Classic卡,拿到
MifareClassic实例,验证对应扇区的密钥后就能读取指定块的存储内容;其他协议的标签对应调用系统提供的TagTechnology子类方法即可 - 外接读卡器场景直接调用SDK提供的读卡方法,就能拿到返回的标签ID、存储区数据
四、数据查询与结果展示
- 首先添加网络权限:在
AndroidManifest.xml中加入<uses-permission android:name="android.permission.INTERNET" /> - 网络请求封装:用OkHttp或者Retrofit封装网络请求,把读取到的标签ID作为请求参数,按照指定网站的接口要求发送GET/POST请求
- 结果解析:拿到接口返回的JSON/XML数据后,解析成对应的实体类对象
- 界面展示:在主线程中用TextView、RecyclerView等控件把解析后的结果展示给用户,建议加加载状态提示、异常状态提示,避免无网络、接口报错时用户以为应用崩溃
五、开发避坑提示
- 测试NFC功能时注意不同Android设备的NFC感应区位置不同,通常在背部摄像头附近,扫描失败时多换几个位置测试
- 外接USB读卡器要注意动态申请权限,不要只做静态权限注册
- 网络请求不要放在主线程执行,用协程或者子线程处理网络逻辑
内容的提问来源于stack exchange,提问作者Shiraz jaf
相关产品推荐
相关产品推荐

