一、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的读写相关推荐

  1. Android开发——NFC标签读写

    Android开发----NFC标签读写 前言 最近因为项目需要,特意学习了NFC的Android开发.加上之前并没有系统地学习过Android开发知识,起手比较困难,搞了半天才算一知半解.怎么办呢? ...

  2. Android基于nfc的读写(一)

    这里写自定义目录标题 Android的NFC读写(一) NFC简介 代码解析 源码(Demo) Android的NFC读写(一) 近来,因需求需要开发nfc读写功能,网上查阅了许多资料,发现相关方面资 ...

  3. Android针对IC卡读写的NFC开发

    菜鸟进场,方圆十里,寸草不生 这两天研究了NFC功能,网上查了很多的资料,不过感觉别人讲的都大同小异,但都缺了那么一点点火候,因为第一次接触有些概念是不清楚的,所以代码看上去很吃力,这个博客呢就是想整 ...

  4. Android nfc模块读写MifareClassic卡50

     http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...

  5. Android NFC 标签读写Demo与历史漏洞概述

    文章目录 前言 NFC基础 1.1 RFID区别 1.2 工作模式 1.3 日常应用 NFC标签 2.1 标签应用 2.2 应用实践 2.3 标签预览 2.4 前台调度 NFC开发 3.1 NDEF数 ...

  6. Android应用实例之----MifareUltralight格式的nfc标签读写

    随着支持nfc通信功能的智能手机更加普及,在移动支付及公交卡.诊疗卡读写等方面将会发挥更大的作用. 首先介绍Android NFC的工作流程: 步骤1:通过android.nfc.NfcAdapter ...

  7. android NFC的读写

    一.NFC知识 1.NFC是什么? NFC,即Near Field Communication,近距离无线通讯技术,是一种短距离的(通常<=4cm或更短)高频(13.56M Hz)无线通信技术, ...

  8. Android之NFC读写操作

    上次记录NFC知识时,还处在研究状态,现在项目的第一阶段开发已经完成.上篇Android之NFC开发,简单介绍了一些知识,也是对未知信息的研究,总要了解一点来龙去脉,省的心发慌.这篇文章总结自己的项目 ...

  9. Android中NFC读写

    参考网址:https://blog.csdn.net/sky2016_w/article/details/79026596 https://www.jianshu.com/p/61f90708bb02 ...

最新文章

  1. 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
  2. apache 配置rewrite模块,URL中隐藏index.php
  3. python与数据库连接的代码_python连接数据库的案例及源代码
  4. Java并发编程高级篇(十):分离任务的执行和结果的处理
  5. Python中的装饰器,迭代器,生成器
  6. 《机器学习》 周志华学习笔记第一章 绪论(课后习题)
  7. 在一个div里,列表样式图片进行float,实现水平排序
  8. git 提交代码命令_提交代码:git push 命令的四种形式
  9. CoinList将销售价值4000万美元的社交代币RLY
  10. HDU 1042 N!( 高精度乘法水 )
  11. 设备管理(最近考试有考到,就转一下)
  12. 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
  13. 使用梯度下降与牛顿法求解最小平方和问题
  14. 如何成为Java高级工程师?
  15. 2021年石景山区景贤计划人才认定申报要求及流程
  16. tp5.1 保利威视 云课堂 三分屏 PC直播DEMO(不适合普通直播)
  17. 手机电脑都能用,将照片转成PDF的免费方法
  18. 反汇编入门试手 简单程序
  19. 一台计算机连接两个投影,事实:如何将两个外接显示器连接到笔记本电脑以同时实现三个屏幕?...
  20. 舌尖上的AI:人工智能技术正在被“端上”餐桌

热门文章

  1. 设为首页-加入收藏-联系我们的代码
  2. excel 给合并的单元格进行序号填充
  3. 智能家居实体门店老板如何搭建线上运营体系,实现业绩倍增?
  4. 无人驾驶公司Roadstar发公告开除联合创始人周光
  5. java访问邮箱 apache,apache james使用入门_邮件服务器
  6. unity-打包及发布
  7. 数字书法授课软件怎么选择比较好?
  8. 带小数的十进制转换为二进制
  9. 计算机方向的综述投稿哪个期刊,COMPUTER
  10. PS/LR滤镜校正工具perfectly clear3破解版