首页 > 其他分享 >Android NFC简介

Android NFC简介

时间:2023-07-28 17:31:45浏览次数:52  
标签:NFC 简介 NDEF tag 消息 Android android


目录:

Android NFC

1 简介

1.1 什么是 NFC

1.2 Android 上的 NFC

1.3 Android 中的 NFC 通讯机制

2 用法

2.1 读取 tag

2.2 发送消息

2.2.1 发送过程

2.2.2 NDEF 消息格式



1 简介

1.1 什么是 NFC

近场通讯 (Near Filed Communication) 技术是一种近距离的高频无线通信技术, 通常距离是4 厘米或更短。 NFC 工作频率是 13.56M Hz, 传输速率是 106kbit/s 到 848kbit/s. NFC 总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。

与其他无线通信技术比较, 例如蓝牙和 WiFi , NFC 提供更低贷款和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。

1.2 Android 上的 NFC

Android 在Android 2.3(API Level 9) 中首次增加了对NFC 的支持,但是只能读取tag ,有很多不完善的地方。在Level 10 中增加了对tag 的写,不过构造和解析消息都是需要自己来处理。

后来的Android 4.0 ICS(API Level 14) 中全面提升了NFC 的功能,支持两台NFC 手机的相互通信,并且封装了方便的消息构造和解析接口。

Android 提供了三种级别的NFC 消息:

Ø  android.nfc.action.NDEF_DISCOVERED 由应用程序构造的NDEF (NFC Data Exchange Format:NFC 数据交换格式)消息。

Ø  android.nfc.action.TECH_DISCOVERED :  现有的标准NFC 协议构造的消息。

Ø  android.nfc.action.TAG_DISCOVERED :不符合前面两种格式的消息。

1.3 Android 中的 NFC 通讯机制

          首先应用程序向系统注册感兴趣的Intent ,当系统的NFC 服务收到一条tag 之后,会打开合适的应用并传递Intent 。如果同时有N 个应用都对这个tag 感兴趣,并且都不在前台,则系统会弹出选择列表让用户选择,如果其中某个应用在前台,则系统直接将Intent 投递到此应用。具体如何注册见后面的用法。

2 用法

2.1 读取 tag

首先,必须在manifest 中申明NFC 的权限和feature :

< uses-permission android:name = "android.permission.NFC" />

< uses-feature android:name = "android.hardware.nfc" />

如果应用必须拥有NFC 的手机才能安装,则在 uses-feature 中加上属性 android:required = "true" 方便marekt 过滤。


然后注册感兴趣的Intent 。

u  NDEF 格式的消息 


这里的data 指定了感兴趣的数据类型和格式,系统会自动过滤出符合条件的Intent 。上面这个data 表示只接受纯文本的数据。如果只接受 http://www.qq.com 这个网址,则data 定义如下:


注意,这个类型 < category android:name = "android.intent.category.DEFAULT" /> 要加上。

u  TECH 格式的消息 


meta-data 中的resource 指定了对使用了哪些技术的tag 感兴趣。filter_nfc.xml 的内容如下:


这里是将所有的tech 标准都放到里面了,实际使用的时候不应如此,应该取一个或多个子集。这里关于tech 列表的子集定义还有一些规范,网上可以查到,就不赘述。

u  TAG 格式的消息 


如此,则所有没有被捕获的Intent 就会发送到这里来,算是各种未知NFC 数据的集散地。

Tag 分发系统流程图如下:



2.2 发送消息

      2.2.1 发送过程

首先取得一个NFCAdapter ,一般是使用默认的:


三个发送消息相关的API :

Ø  public void setNdefPushMessage (NdefMessage message, Activity activity, Activity... activities)

设置NDEF 消息。API 文档上说这个方法设置之后不需要让用户操作,设备靠近会自行发出,但是经过尝试发现不行,也许是有什么没注意到的地方。

Ø  public void setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)

设置NDEF 消息的构造器,每次构造消息都会调用callback 的createNdefMessage 方法获取NDEF消息。

Ø  public void setOnNdefPushCompleteCallback (NfcAdapter.OnNdefPushCompleteCallback callback, Activity activity, Activity... activities)

设置NDEF 消息发送完毕之后的回调接口。


      2.2.2 NDEF 消息格式

一个NdefMessage 对象是由N 个NdefRecord 组成,NdefRecord 可以根据自己的需要去定义里面的内容,不过如果要构造公共的标准NdefRecord ,就需要查阅API 文档了。

标签:NFC,简介,NDEF,tag,消息,Android,android
From: https://blog.51cto.com/u_548275/6885717

相关文章

  • Android-组件属性
    ImageView:app:tint=“”(tint:染色)作用:将非透明像素点染成指定颜色 EditText:android:selectAllOnFocus="true"作用:输入框获取焦点后,获取到所有文本内容 ......
  • AndroidAnnotations 自定义控件 ant编译 找不到类
    问题:今天使用jenkins+ant编译android项目,一直编译不通过,报错内容就是,自定义控件找不到类。确认了几次svn提交,项目代码完全提交,所以想到是不是代码的问题。故回头查询代码。在代码中使用了下划线类。这个类是在AA中自动生成的,而报错的地方,正是编译生成的地方,觉得可能和编......
  • Android从相册、照相机选择图片(支持4.4+,KIKAT以上)
    开发都会遇到从手机的相册和照相机选择图片的功能,下面是一段通用的代码,用来选择手机中的图片,以后用的时候,直接调用就可以了。使用到的类属性publicfinalstaticintCONSULT_DOC_PICTURE=1000;publicfinalstaticintCONSULT_DOC_CAMERA=1001;privateintSELECT_PICTURE......
  • AndroidAnnotations 使用在library项目中出现无法找到R文件下资源索引的错误
    AndroidAnnotations使用在library项目中出现无法找到R文件下资源索引的错误使用AndroidAnnotations(以下简称AA)已经有一段时间了,挺好用的,基本上完全可以满足Android开发需要,可以简化代码,所以现在在岗编写的所有的项目都是基于AA实现的。AA现在最新版本为3.2官方地址:http://android......
  • Kotlin 踩坑日记(六)Android studio 3.0.0 Canary 4 Instant Run
    前言宁夏的特色假日,开斋节放了5天,今天回来上班。放假前,Androidstudio3.0发布了Canary4的升级,因为即将放假,所以就没有升级,节后上班第一天,就安排升级并且试用一下。DebugApk找不到Application类没有别的问题,只是在InstantRun环境下,找不到App的Application类,应用安装成功后,......
  • Android 人脸识别 MTCNN Kotlin实现
    前言看见网上有一个MTCNN的Java实现,闲来无事,把Java实现用Koltin重写了一下,主要是针对使用MTCNN来识别人脸。不想罗嗦看的,可以直接去我的github上下载已经写好的demo。https://github.com/ChineseLincoln/AndroidFaceNet文章目录前言人脸识别tensorflowAndroid依赖配置MTCNN......
  • Android-定义和获取字符串资源
    resource->values->strings.xml里定义字符串定义单字符串:<stringname="app_name">abc123</string>定义字符串数组:<string-arrayname="map_style_array"><item>MAPBOX_STREETS</item><item>OUTDO......
  • Redis 简介
    1、问题:2、Redis介绍2.1 redis是什么?2.2那Redis不是什么?2.3 Redis性能:2.4 Redis的功能:3、数据结构3.1Key3.2String3.3Hash3.4List3.5Set3.6SortedSet3.7事务3.8过期数据清除4、redis排序简介4.1 以下是对list按key排序的示例:4.2 一般SORT用法4.3 ......
  • 17 位谷歌 Android 开发专家是如何看待 Kotlin 的?
    译者简介:ASCE1885,《Android高级进阶》作者。*微信公众号:asce1885*小密圈:Android高级进阶,详情见这篇文章。*Github,简书,微博,原文链接:https://antonioleiva.com/google-kotlin/,由于Markdown对图片的排版存在限制,因此为了保证排版的美观,本文对作者介绍部分进行截图,不做另......
  • Android-单例模式
    单例模式意图:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 publicclassSingleton{privatestaticSingletoninstance=newSingleton();......