Android对NFC技术的支持

Android2.3.1(API Level = 9)开始支持NFC技术,但Android2.x和Android3.x对NFC的支持非常有限。而从Android4.0(API Level = 14)开始,Google开始向NFC发力,NFC技术在Android中得到了更进一步的支持。尤其是Android4.1,可以利用NFC技术传递较大的数据(NFC会利用蓝牙技术进行大数据量的传输)。

NFC标签

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

NDEF数据的操作

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

从NFC标签读取NDEF格式的数据。

向NFC标签写入NDEF格式的数据。

通过Android Beam技术将NDEF数据发送到另一部NFC设备。

非NDEF数据

对于某些特殊需求,NDEF格式可能无法满足我们的要求,这时就需要使用非NDEF数据格式。这些数据格式实际上就是普通的字节流,至于字节流中的数据代表什么,就由开发人员自己定义了。这种数据格式称为非NDEF数据。

NFC的三重过滤机制

在一个NFC设备读取NFC标签或另一个NFC设备中的数据之前会在0.1秒之内建立NFC连接,然后数据会自动从被读取一端流向读取数据的一端(NFC设备一般需要触摸一下屏幕才开始传输)。数据接收端会根据具体的数据格式和标签类型调用相应的Activity(这种行为也称为Tag Dispatch)。这些Activity都需要定义Intent Filter。这些Intent Filter中就会指定不同的过滤机制,分为3个级别。因此,也称为NFC的三重过滤机制。

# NDEF_DISCOVERED:只过滤固定格式的NDEF数据。例如,纯文本、指定协议(http、ftp、smb等)的URI等。

# TECH_DISCOVERED:当ACTION_NDEF_DISCOVERED指定的过滤机制无法匹配Tag时,就会使用这种过滤机制进行匹配。这种过滤机制并不是通过Tag中的数据格式进行匹配的,而是根据Tag支持的数据存储格式进行匹配。因此这种过滤机制的范围更广。

# TAG_DISCOVERED:如果将NFC的过滤机制看成是if… elseif…else语句的话,那么这种过滤机制就相当于else语句。前面两种过滤机制都失败后,系统就会利用这种过滤机制来处理。这种过滤机制用来处理未识别的Tag(数据格式不对,而且Tag支持的格式也不匹配)。

Android系统会依次匹配NDEF_DISCOVERED、TECH_DISCOVERED和TAG_DISCOVERED。如果通过三重过滤机制仍然无法匹配Tag,则什么都不做。通常在成功匹配Tag后,Android设备会发出比较清脆的声音,而未成功匹配Tag,就会发出比较沉闷的声音。

 <activity
android:name=".TagTextActivity"
android:label="显示纯文本NFC标签的内容"
android:launchMode="singleTask" >
<intent-filter>
<!-- 指定了NDEF_DISCOVERED -->
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 指定了纯文本格式 -->
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
编写NFC程序的步骤
# 设置权限  uses-permission android:name="android.permission.NFC" />
 
# 限制Android版本  <uses-sdk android:minSdkVersion="14"/>

# 限制安装的设备   <uses-feature android:name="android.hardware.nfc" android:required="true" />

# 定义可接收Tag的Activity

# 处理业务逻辑

测试NFC程序需要的设备

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

支持NFC的主要机型

Samsung Nexus
S i9020
Samsung Galaxy
S II i9101
Samsung Galaxy
Note i9220
HTC G17
Nexus 7/Nexus 10
Nexus 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

6、Android中的NFC技术的更多相关文章

  1. Android中直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  2. Android中Java反射技术的使用示例

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  3. Android中直播视频技术探究之---桌面屏幕视频数据源采集功能分析

    一.前言 之前介绍了Android直播视频中一种视频源数据采集:摄像头Camera视频数据采集分析 中介绍了利用Camera的回调机制,获取摄像头的每一帧数据,然后进行二次处理进行推流.现在我们在介绍 ...

  4. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  5. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

    一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,A ...

  6. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  7. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  8. Android中通过进程注入技术修改系统返回的Mac地址

    致谢 感谢看雪论坛中的这位大神,分享了这个技术:http://bbs.pediy.com/showthread.php?t=186054,从这篇文章中学习到了很多内容,如果没有这篇好文章,我在研究的过 ...

  9. android中画弧函数canvas.drawArc()之理解

    在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法.参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,作为学习过程中 ...

随机推荐

  1. iOS开发--动画(Animation)总结

    UIView的,翻转.旋转,偏移,翻页,缩放,取反的动画效果   翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:ni ...

  2. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  3. ubuntu启动eclipse时出错cannot open display

    由于要学习hadoop,就在ubuntu下创建了一个hadoop用户,但是eclipse是在naomi用户下装的,在root和naomi用户下都能正常启动,但是一旦切换到hadoop用户,试着启动ec ...

  4. 【流媒体】 Android 实时视频编码—H.264硬编码

    [流媒體] Android 实时视频编码—H.264硬编码 SkySeraph Apr 4th 2012 Email:skyseraph00@163.com 1  硬编码 & 软编码 硬编码: ...

  5. AbsListView.OnScrollListener 使用注意事项

    这个类没什么特别的,但是使用的时候我确出错了 abstract void onScroll(AbsListView view, int firstVisibleItem, int visibleIte ...

  6. 一个日期Js文件。 2013年10月12日 星期六 癸巳年九月初八

    1.简单用法 <div align="center">  <SCRIPT language=JavaScript src="js/calendar.js ...

  7. eclipse中启动tomcat报错 java.lang.ClassNotFoundException

    之前启动还好好的,某次启动tomcat就莫名其妙的报了这个java.lang.ClassNotFoundException的错.   检查maven依赖包,发现这个类是存在的. 然后一通clean操作 ...

  8. python3代码

    import urllib.request url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1&quo ...

  9. umount移动硬盘遇到device is busy问题

    #umount  /mnt/fourtumount: /mnt/fourt: device is busy.        (In some cases useful info about proce ...

  10. C# WebBrowser 设置代理完全解决方案

    微软webbrowser控件也就是IE插件,他的所有功能就像IE类似,当然设置也是一样的,下面介绍下webbrowser如何设置代理,可不要用这个对抗广告联盟哦 You can change the ...