6、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设备与这些标签进行更复杂的交互。这些标签中的数据也会采用不同的格式。但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的三重过滤机制。
# 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,就会发出比较沉闷的声音。
1 <activity 2 android:name=".TagTextActivity" 3 android:label="显示纯文本NFC标签的内容" 4 android:launchMode="singleTask" > 5 <intent-filter> 6 <!-- 指定了NDEF_DISCOVERED --> 7 <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 8 <category android:name="android.intent.category.DEFAULT" /> 9 <!-- 指定了纯文本格式 --> 10 <data android:mimeType="text/plain" /> 11 </intent-filter> 12 </activity>
# 限制安装的设备 <uses-feature android:name="android.hardware.nfc" android:required="true" />
# 定义可接收Tag的Activity
# 处理业务逻辑
测试NFC程序需要的设备
支持NFC的主要机型
相关文章
- The method Inflate() in android
- 深挖android low memory killer
- Android API之android.provider.ContactsContract.Data
- Android API之android.provider.ContactsContract.Contacts
- 15、NFC技术:使用Android Beam技术传输文件
- 14、NFC技术:使用Android Beam技术传输文本
- 7、NFC技术:让Android自动运行程序
- OpenGL—Android 开机动画源码分析一
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
- 8、NFC技术:让Android自动打开网页
- 【聚划算 Android 技术周刊 第三期- 20160826】
- 《Android进阶之光》--View体系与自定义View
- android 自定义view 缓存技术
- Android版OpenCV图像处理技术亲自验证[四十]之图片缩放(附源码)
- Android版OpenCV图像处理技术亲自验证[二十六]之2D过滤器(附源码)
- Android版OpenCV图像处理技术亲自验证[二十三]之双边过滤器(附源码)
- Android版OpenCV图像处理技术亲自验证[十八]之Optical Flow 光流法(附源码)
- Android版OpenCV图像处理技术亲自验证[十六]之相机特效
- Atitit 前端与ui开发的技术道术与艺术 attilax著 1. 概述2 1.1. 适用领域: ui相关领域(包括h5 web ios android安卓 cs桌面程序 游戏程序 等
- 最新 Android Flutter 技术解析与实战,带你深入Flutter内部机制
- cordova蓝牙,iOS和android特征和服务的uuid不一样,要加-
- Android修行手册-那试探布局的初次体验
- android java 堆栈_Android下打印调试堆栈方法
- Android【报错】Failed to resolve: com.android.support:appcompat-v7:28.0.0-alpha【报错】
- Android 11.0 12.0SystemUI增加低电量弹窗功能
- Android kotlin自定义自动换行LinearLayout
- Android 9.0 10.0代码设置系统默认语言为中文
- Android 8.0设置系统时区
- Android插屏动画效果
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
- 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
- Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
- android怎么换背景图片
- This project uses AndroidX dependencies, but the ‘android.useAndroidX‘ property is not enabled. Set
- android javap命令生成自定义类签名