NFC

NFC

近场通信(Near Field Communication,简称NFC),是一种新兴的技术,使用了NFC技术的设备可以在彼此相互靠近的情况下进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来的,通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、电子票务、门禁、移动身份识别、防伪等应用

NFC标准为了和非接触式智能卡兼容,规定了一种灵活的网关系统,具体分为三种工作模式:

  • 读卡器模式
  • 仿真卡模式
  • 点对点模式

读卡器模式

数据在NFC芯片中,可以简单理解成“
签”。本质就是通过支持NFC的手机或其他电子设备从带有NFC芯片的标签、贴纸、名片等媒介中读写信息。通常NFC标签是不需要外部供电的,当支持NFC的外设向NFC读写数据时,它会发送某种磁场,而这个磁场会自动的向NFC标签供电。

仿真卡模式

在该模式下,数据在支持NFC的手机或其他电子设备中,可以简单理解成“刷手机”。本质上就是将支持NFC的手机或其他电子设备当成借记卡、公交卡、门禁卡等IC卡使用。基本原理是将相应IC卡中的信息凭证封装成数据包存储在支持NFC的外设中。

点对点模式

该模式与蓝牙、红外差不多,用于不同NFC设备之间进行数据交换。NFC的有效距离一般不能超过4厘米,单传输建立速度要比红外和蓝牙技术快很多,传输建立后,NFC会直接利用蓝牙传输,这种技术被称为Android Beam。使用Android Beam传输数据的两部设备不再限于4厘米之内。

点对点模式的典型应用是两部支持NFC的手机或平板电脑实现数据的点对点传输,例如,交换图片或同步设备联系人。

Android NFC的应用场景

  • 电子标签识别
  • 刷手机
  • 点对点付款
  • 身份识别
  • 信息记录
  • 点对点信息传输

不同的NFC标签之间差异很大,有的只支持简单的读写操作,有时还会采用支持一次性写入的芯片,将NFC标签设计成只读的。当然,也存在一些复杂的NFC标签,例如,有些NFC标签可以通过硬件加密的方式限制对某一区域的访问。还有一些标签自带操作环境,允许NFC设备与这些标签更复杂的交互。这些标签中的数据也会采用不同的格式。但Android SDK API主要支持NFC论坛标准(Found Standard),这种标准被称为NDEF(NFC Data Exchange Format,NFC数据交换格式)。

Android SDK API支持如下3种NDEF数据的操作

  • 从NFC标签读取NDEF格式的数据
  • 向NFC标签写入NDEF格式的数据
  • 通过Android Beam技术将NDEF数据发送到另一部NFC设备

编写NFC程序的基本步骤

  • 设置权限
<uses-permission android:name="android.permission.NFC"/>
  • 限制安装的设备
<uses-feature android:name="android:hardware.nfc"
	android:required="true"/>
  • 定义可接收Tag的Activity
  • 处理业务逻辑

测试NFC程序需要的设备

  • 支持NFC的手机或平板电脑
  • NFC标签或贴纸若干(可读写)

Android NFC操作

1. 配置AndroidManifest.xml:

<!--NFC权限-->
<uses-permission android:name="android:permission.NFC"/>
<!--要求当前设备必须要有NFC芯片-->
<uses-feature android:name="android.hardware.nfc"
	android:required="true"/>

2. 获取设备默认的NfcAdapter对象,判断该设备是否支持NFC功能,若支持,判断此功能是否打开,并且创建一个PendingIntent对象,用于当NFC标签被检测到时,启动我们处理NFC标签的Activity

3. 在OnNewIntent()方法中,获取到Tag对象

@Override
protected void onNewIntent(Intent intent){
	super.onNewIntent(intent);
	mTag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);//获取到Tag标签对象
	String[] techList=mTag.getTechList();
	System.out.println("标签支持的tachnology类型:");
	for(String tech:techList){
		System.out.println(tech);
	}
}

4. 为了更好的处理NFC标签,我们需要在Activity获取焦点时(onResume),在主线程中启动前台发布系统,并且在Activity失去焦点时(onStop),关闭前台发布系统

5. NFC写标签步骤:
①获取Ndef对象

Ndef ndef=Ndef.get(mTag);//获取ndef对象

②创建文本NdefRecord
③创建NdefMessage,并且写入Ndef标签
④读Ndef文本数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值