android——实现NFC的读写
一、NFC是什么?
近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。
NFC通信模式主要有以下几种(信息来源):
1.读卡器模式(Reader/writer mode):
作为非接触读卡器使用,比如从海报或者展览信息电子标签上读取相关信息。亦可实现NFC手机之间的数据交换,对于企业环境的中的文件共享,或者对于多玩家的游戏应用,都将带来诸多的便利。
2. 点对点模式(P2Pmode):
此模式和红外线差不多,可用于数据交换,只是传输距离较短,传输创建速度较快,传输速度也快些,功耗低(蓝牙也类似)。将两个具备NFC功能的设备无线链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。因此通过NFC,多个设备如数位相机、PDA、计算机和手机之间都可以交换资料或者服务。
3.卡模式(Cardemulation):
这个模式其实就是相当于一张采用RFID技术的IC卡,可以替代大量的IC卡(包括信用卡)使用的场合,如商场刷卡、公交卡、门禁管制,车票,门票等等。此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的 RF 域来供电,即使寄主设备(如手机)没电也可以工作。
二、如何使用与集成到项目?
1、首先在manifests里面声明NFC和添加相应的权限;
<uses-feature android:name="android.hardware.nfc" android:required="true" /> <uses-permission android:name="android.permission.NFC" />
2、在Activity标签中声明识别NFC标签;
<activity android:name=".Activity.Main.NFCActivity"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter>
</activity>
3、封装NFC的读写,方便调用;
public class NfcUtils { //nfc public static NfcAdapter mNfcAdapter; public static IntentFilter[] mIntentFilter = null; public static PendingIntent mPendingIntent = null; public static String[][] mTechList = null; /** * 构造函数,用于初始化nfc*/ public NfcUtils(Activity activity) { mNfcAdapter = NfcCheck(activity); NfcInit(activity); } /** * 检查NFC是否打开 */ public static NfcAdapter NfcCheck(Activity activity) { NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); if (mNfcAdapter == null) { return null; } else { if (!mNfcAdapter.isEnabled()) { Intent setNfc = new Intent(Settings.ACTION_NFC_SETTINGS); activity.startActivity(setNfc); } } return mNfcAdapter; } /** * 初始化nfc设置 */ public static void NfcInit(Activity activity) { mPendingIntent = PendingIntent.getActivity(activity, 0, new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); IntentFilter filter2 = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED); try { filter.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) { e.printStackTrace(); } mIntentFilter = new IntentFilter[]{filter, filter2}; mTechList = null; } /** * 读取NFC的数据 */ public static String readNFCFromTag(Intent intent) throws UnsupportedEncodingException { Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawArray != null) { NdefMessage mNdefMsg = (NdefMessage) rawArray[0]; NdefRecord mNdefRecord = mNdefMsg.getRecords()[0]; if (mNdefRecord != null) { String readResult = new String(mNdefRecord.getPayload(), "UTF-8"); return readResult; } } return ""; } /** * 往nfc写入数据 */ public static void writeNFCToTag(String data, Intent intent) throws IOException, FormatException { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); Ndef ndef = Ndef.get(tag); ndef.connect(); NdefRecord ndefRecord = NdefRecord.createTextRecord(null, data); NdefRecord[] records = {ndefRecord}; NdefMessage ndefMessage = new NdefMessage(records); ndef.writeNdefMessage(ndefMessage); } /** * 读取nfcID */ public static String readNFCId(Intent intent) throws UnsupportedEncodingException { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); String id = ByteArrayToHexString(tag.getId()); return id; } /** * 将字节数组转换为字符串 */ private static String ByteArrayToHexString(byte[] inarray) { int i, j, in; String[] hex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; String out = ""; for (j = 0; j < inarray.length; ++j) { in = (int) inarray[j] & 0xff; i = (in >> 4) & 0x0f; out += hex[i]; i = in & 0x0f; out += hex[i]; } return out; }
}
4、在NFCActivity代码中的使用、使用标签的前台调度系统;
@Override
public void initData() { //nfc初始化设置 NfcUtils nfcUtils = new NfcUtils(this);
}
@Override
protected void onResume() { super.onResume(); //开启前台调度系统 NfcUtils.mNfcAdapter.enableForegroundDispatch(this, NfcUtils.mPendingIntent, NfcUtils.mIntentFilter, NfcUtils.mTechList);
}
@Override
protected void onPause() { super.onPause(); //关闭前台调度系统 NfcUtils.mNfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //当该Activity接收到NFC标签时,运行该方法 //调用工具方法,读取NFC数据 String str = NfcUtils.rendFromTag(intent);
}
android——实现NFC的读写相关推荐
- Android开发——NFC标签读写
Android开发----NFC标签读写 前言 最近因为项目需要,特意学习了NFC的Android开发.加上之前并没有系统地学习过Android开发知识,起手比较困难,搞了半天才算一知半解.怎么办呢? ...
- Android基于nfc的读写(一)
这里写自定义目录标题 Android的NFC读写(一) NFC简介 代码解析 源码(Demo) Android的NFC读写(一) 近来,因需求需要开发nfc读写功能,网上查阅了许多资料,发现相关方面资 ...
- Android针对IC卡读写的NFC开发
菜鸟进场,方圆十里,寸草不生 这两天研究了NFC功能,网上查了很多的资料,不过感觉别人讲的都大同小异,但都缺了那么一点点火候,因为第一次接触有些概念是不清楚的,所以代码看上去很吃力,这个博客呢就是想整 ...
- Android nfc模块读写MifareClassic卡50
http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...
- Android NFC 标签读写Demo与历史漏洞概述
文章目录 前言 NFC基础 1.1 RFID区别 1.2 工作模式 1.3 日常应用 NFC标签 2.1 标签应用 2.2 应用实践 2.3 标签预览 2.4 前台调度 NFC开发 3.1 NDEF数 ...
- Android应用实例之----MifareUltralight格式的nfc标签读写
随着支持nfc通信功能的智能手机更加普及,在移动支付及公交卡.诊疗卡读写等方面将会发挥更大的作用. 首先介绍Android NFC的工作流程: 步骤1:通过android.nfc.NfcAdapter ...
- android NFC的读写
一.NFC知识 1.NFC是什么? NFC,即Near Field Communication,近距离无线通讯技术,是一种短距离的(通常<=4cm或更短)高频(13.56M Hz)无线通信技术, ...
- Android之NFC读写操作
上次记录NFC知识时,还处在研究状态,现在项目的第一阶段开发已经完成.上篇Android之NFC开发,简单介绍了一些知识,也是对未知信息的研究,总要了解一点来龙去脉,省的心发慌.这篇文章总结自己的项目 ...
- Android中NFC读写
参考网址:https://blog.csdn.net/sky2016_w/article/details/79026596 https://www.jianshu.com/p/61f90708bb02 ...
最新文章
- 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
- apache 配置rewrite模块,URL中隐藏index.php
- python与数据库连接的代码_python连接数据库的案例及源代码
- Java并发编程高级篇(十):分离任务的执行和结果的处理
- Python中的装饰器,迭代器,生成器
- 《机器学习》 周志华学习笔记第一章 绪论(课后习题)
- 在一个div里,列表样式图片进行float,实现水平排序
- git 提交代码命令_提交代码:git push 命令的四种形式
- CoinList将销售价值4000万美元的社交代币RLY
- HDU 1042 N!( 高精度乘法水 )
- 设备管理(最近考试有考到,就转一下)
- 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
- 使用梯度下降与牛顿法求解最小平方和问题
- 如何成为Java高级工程师?
- 2021年石景山区景贤计划人才认定申报要求及流程
- tp5.1 保利威视 云课堂 三分屏 PC直播DEMO(不适合普通直播)
- 手机电脑都能用,将照片转成PDF的免费方法
- 反汇编入门试手 简单程序
- 一台计算机连接两个投影,事实:如何将两个外接显示器连接到笔记本电脑以同时实现三个屏幕?...
- 舌尖上的AI:人工智能技术正在被“端上”餐桌