在Android平台上,通过NFC(Near Field Communication)技术可以实现读取NFC卡片的数据,包括卡号等信息。本文将详细介绍如何在Android应用中实现这一功能。我们需要理解NFC的基本概念,它是一种短距离无线通信技术,允许电子设备间进行非接触式点对点数据交换。 1. **权限配置**: 在AndroidManifest.xml文件中,添加必要的权限声明,以允许应用使用NFC功能。需要`<uses-permission>`标签来请求`android.permission.NFC`权限,以便访问NFC硬件。同时,使用`<uses-feature>`标签声明应用需要NFC功能,并设置`android:required="true"`,表示应用必须有NFC硬件才能运行。 ```xml <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> ``` 2. **注册IntentFilter**: 需要在AndroidManifest.xml中注册一个`<intent-filter>`,用于监听NFC标签的发现事件。这里我们关注`ACTION_TAG_DISCOVERED`,当NFC标签靠近设备时,系统会触发这个动作。同时,`<data>`标签可以设置数据类型,但在这个例子中并未使用。 ```xml <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <data android:mimeType="text/plain" /> </intent-filter> ``` 3. **Activity初始化**: 在Activity的`onResume()`方法中,启用前景调度服务,这样当NFC标签靠近设备时,系统会将Intent传递给当前Activity。为此,我们需要初始化`NfcAdapter`对象,创建`PendingIntent`,然后调用`enableForegroundDispatch()`方法。 ```java @Override protected void onResume() { super.onResume(); mNfcAdapter = NfcAdapter.getDefaultAdapter(this); pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass()) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); mNfcAdapter.enableForegroundDispatch(this, pi, null, null); } ``` 4. **处理NFC Intent**: 在`onNewIntent()`方法中,我们需要检查接收到的Intent是否是由NFC事件触发的。如果是,调用`processIntent()`方法来解析NFC标签的信息。 ```java @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { processIntent(intent); } } ``` 5. **解析NFC数据**: `processIntent()`方法中,从Intent的`EXTRA_TAG`字段获取到NFC标签对象,然后通过`getId()`方法获取标签ID,这通常包含了卡号信息。由于返回的是字节数组,我们需要将其转换为字符串。这里使用了`ByteArrayToHexString()`方法,将字节转换为16进制字符串。 ```java private void processIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); String cardId = ByteArrayToHexString(tagFromIntent.getId()); } private String ByteArrayToHexString(byte[] inarray) { // ... } ``` 6. **ByteArrayToHexString方法**: 这个辅助方法遍历字节数组,将每个字节转换为16进制字符串,并连接成一个完整的16进制表示的卡号字符串。 ```java private String ByteArrayToHexString(byte[] inarray) { // ... } ``` 通过以上步骤,我们便能在Android应用中实现读取NFC卡号的功能。当然,实际应用中可能还需要处理各种异常情况,例如NFC功能未开启、无可用NFC硬件等,确保程序的健壮性。此外,根据实际需求,可能还需要解析NDEF消息,获取更丰富的NFC标签信息。
















- skyredni2020-09-24我以为啥有用的,就是全网免费的东西。没必要下载

- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电子商务PPT模板(3)公开课教案课件.ppt
- 互联网搅拌站控制系统.docx
- 招标师考试项目管理模拟试卷.doc
- 天能集团咨询项目管理手册.doc
- 人工神经网络ANN及其MAtlab仿真.ppt
- 最新智慧城市顶层设计规划方案PPT课件.ppt
- 新快网络代理商合作协议.doc
- 网络课程整体评价学生评价问卷(教学资源中心标准).doc
- 网络抓包与协议分析软件的设计与开发.doc
- 量子通信同步系统.docx
- 加强和创新网络道德教育ppt课件.ppt
- 基于PIC单片机SPI接口的数据采集模块设计说明.doc
- 国内外灾害数据库汇总表(word文档良心出品).doc
- 兄弟连Linux教程-李明-Linux视频教程课件1.1.1Linux系统简介UNIX发展历史和发行.pptx
- 电力工程电力自动化技术的应用分析.doc
- 高职院校《汽车保险与理赔》信息化教学改革探索获奖科研报告论文.docx


