最近遇到需求,需要完成NFC读卡的操作,只好研究一下NFC的读写模式。

Android中NFC知识介绍:

近场通信(NFC)是一种短距离无线技术,通常要求距离为4cm或更低。NFC允许你在NFC标签和android驱动的设备之间,或者在两个android驱动的设备之间共享少量的数据。

简单的标签只提供读和写的功能,有时使用一个可编程的区域使卡片只读。更复杂的标签提供数学运算,并有加密硬件来认证对一个扇区的访问。最复杂的标签包含操作环境,允许通过代码与在标签进行复杂的交互。存储在标签中的数据也可以用多种格式编写,但是Android框架api大多都是基于NDEF标准(NFC数据交换格式)。

根据Google官方文档的介绍,具有NFC的安卓设备同时支持三种主要的操作方式:

  1. Reader/writer mode, allowing the NFC device to read and/or write passive NFC tags and stickers.
  2. P2P mode, allowing the NFC device to exchange data with other NFC peers; this operation mode is used by Android Beam.
  3. Card emulation mode, allowing the NFC device itself to act as an NFC card. The emulated NFC card can then be accessed by an external NFC reader, such as an NFC point-of-sale terminal.

翻译:

  1. 可以当成POS机来用,也就是“读取”模式 。
  2. 可以当成一张卡来刷,也就是NFC技术最核心的移动支付功能 。
  3. 可以像蓝牙、Wi-Fi一样做点对点通信 。

Android NFC 开发中的几个类:

  • NfcManager:用来管理Android设备中所有NFC Adapter,通过getSystemService(Class)来获取它的实例。
  • NfcAdapter:手机的NFC硬件设备,代表了设备的NFC适配器,是NFC操作的入口,大部分Android设备只支持一个NFC Adapter,可以通过getDefaultAdapter()、getDefaultAdapter(android.content.Context)来获取它的实例。
  • NdefMessage:表示一个NDEF数据的,这是在设备和标签之间传输数据的“records”的标准格式。程序可以通过action“ACTION_TAG_DISCOVERED”来接收这些数据。
  • NdefRecord:表示一个record,该record在NdefMessage中传递,并描述共享数据的类型和数据本身。

简单说一下NDEF格式:

一个NDEF格式的标签使用一个NdefMessage来包装,一个NdefMessage由0个或多个NdefRecord组成,其中有各种各样的NdefRecord,比如放Url的,放文本信息的等。

文本信息的NdefRecord的格式:( 一个NdefRecord由四个字段构成)

  • 3-bit TNF:类型名称格式
  • 可变长度类型RTD:记录类型定义
  • 可变长度ID:唯一标识该记录
  • 可变长度的负载:就是文本信息

Tag:代表一个被动式NFC对象。当Android检测到一个Tag时,会创建一个Tag对象,将其放在Intent对象中,然后发送到相应的Activity。

Android 支持的标签技术:
    当使用NFC标签和android驱动的设备时,用来读取和写入标签数据的主要格式是NDEF。当设备扫描带有NDEF数据的标签时,Android提供了解析消息的支持,并在可能的情况下将其发送到NDEF消息中。但是,当您扫描一个不包含NDEF数据或NDEF数据不能映射到MIME类型或URI的标记时,会出现一些情况。在这些情况下,需要直接与标签进行通信,并使用自己的协议(在原始字节中)读取和写入它。Android为这些用例提供了通用的支持

支持的Tag技术:

  • TagTechnology:    这个接口是下面所有tag technology类必须实现的。
  • NfcA:    提供访问 NFC-A (ISO 14443-3A) 的属性和 I/O 操作
  • NfcB:    提供访问 NFC-B (ISO 14443-3B) 的属性和 I/O 操作
  • NfcF:    提供访问 NFC-F (JIS 6319-4) 的属性和 I/O 操作
  • NfcV:    提供访问 NFC-V (ISO 15693)  的属性和 I/O 操作
  • IsoDep:    提供访问 ISO-DEP (ISO 14443-4) 的属性和 I/O 操作
  • Ndef :   提供对那些被格式化为NDEF的tag的数据的访问和其他操作
  • NdefFormatable:    对那些可以被格式化成NDEF格式的tag提供一个格式化的操作

可选的支持的Tag技术:(不要求被Android的供电设备支持)

  • MifareClassic:如果android设备支持MIFARE,提供对MIFARE Classic目标的属性和I/O操作。
  • MifareUltralight:  如果android设备支持MIFARE,提供对MIFARE Ultralight目标的属性和I/O操作。

Android NFC调度系统:
NFC调度是指手机检测到NFC对象后如何处理,调度系统分为前台调度系统和标签调度系统。

1. 前台调度系统(Foreground Dispatch System)

NFC前台调度系统是一种用于在运行的程序中(前台呈现的Activity)处理Tag的技术,即前台调度系统允许Activity拦截Intent对象,并且声明该Activity的优先级比其他的处理Intent对象的Activity高。前台调度系统在一些涉及需要在前台呈现的页面中直接获取或推送NFC信息时十分方便。本文的示例就是使用前台调度。

2.NFC标签调度系统(NFC Tag Dispatch System)

当标签分派系统完成创建一个封装NFC标签及其标签信息的意图时,它将意图发送到一个可以处理该意图的应用程序。当存在多个可以处理该Tag信息的application时,系统会弹出一个Activity Chooser,供用户选择哪个application来处理这个意图。标签调度系统定义了3种意图,按照优先级由高到低分别为:

  • ACTION_NDEF_DISCOVERED: This intent is used to start an Activity when a tag that contains an NDEF payload is scanned and is of a recognized type. This is the highest priority intent, and the tag dispatch system tries to start an Activity with this intent before any other intent, whenever possible.
  • ACTION_TECH_DISCOVERED:  If no activities register to handle the ACTION_NDEF_DISCOVERED intent, the tag dispatch system tries to start an application with this intent. This intent is also directly started (without starting ACTION_NDEF_DISCOVERED first) if the tag that is scanned contains NDEF data that cannot be mapped to a MIME type or URI, or if the tag does not contain NDEF data but is of a known tag technology.
  • ACTION_TAG_DISCOVERED: This intent is started if no activities handle the ACTION_NDEF_DISCOVERED or ACTION_TECH_DISCOVERED intents.

Android之NFC开发简介相关推荐

  1. Android下DLNA开发简介

    Android下DLNA开发简介     前端时间在博客上有写过一篇关于DLNA开发Cling开源库的使用,虽然写的不是很好但是也有几个对DLNA开发有兴趣的同仁有询问我关于这方面的知识.趁着现在有空 ...

  2. android系统nfc开发,GitHub - hanjie511/MyNFC: android的NFC开发入门

    MyNFC android的NFC开发入门 NFC简述 近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接.借助 NFC,您可以在 NFC 标签与 Andr ...

  3. Android之NFC开发

    前段时间有做过一点NFC的,网上借鉴了不少的博客,这里记录一下. NFC简介: Near Field Communication 近场通信,是一种数据传输技术. 与wifi.蓝牙.红外线等数据传输技术 ...

  4. Android Studio应用开发简介

    2017年6月,英创公司在ESM6802+10.1"LCD的硬件平台上成功运行Android 7.1.1原生操作系统.2017年8月,ESM6802 Android 版可以支持GPIO.串口 ...

  5. Android经典蓝牙开发简介(Google官网译文)

    公司的项目最近需要用到蓝牙开发的相关内容,因此特地查阅了Google官方文档的内容并进行二次整理,希望能对需要学习该部分的朋友有所帮助. 原文地址:http://developer.android.c ...

  6. 【转载】Android下DLNA开发简介

    查看全文 http://www.taodudu.cc/news/show-6463795.html 相关文章: DLNA UPnP协议简介 [人工智能 Open AI]设计一套健身减脂方案,实现100 ...

  7. android开启加速功能,Android硬件加速开发简介

    从 Android 3.0(API Level 11)开始,Android 2D 渲染管线被设计为能更好地支持硬件加速功能. 硬件加速功能将所有在 View 组件的 Canvas 上执行的绘制操作都交 ...

  8. Android之NFC读写操作

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

  9. Android NFC开发实战详解

    Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...

最新文章

  1. 入口文件到控制器 php,workerman的入口文件_PHP开发框架教程
  2. 中文文本纠错 算例实现(有算例完整代码)
  3. MQ消息队列之MSMQ
  4. python 图表美化_你的图表不美观怎么办,Python实现数据可视化帮你实现
  5. 迷你版Spring MVC 实现
  6. 华为P50系列确定29日发布:但遗憾的是...
  7. 云服务器磁盘扩容后不显示,腾讯云服务器磁盘扩容问题小记
  8. 移植基于Qt4.4-tp1的WebKit到ARM平台
  9. 网络协议详解1 - NBNS
  10. 如何将其他注册商处的域名申请转出并转入阿里云(图文教程)
  11. 计算机usb接口无法读取,USB接口不识别设备的问题及处理办法
  12. wed基础和http
  13. python3.7 win10 64位系统下用pyinstaller打包的程序在32位系统下无法运行
  14. Android Canvas rotate 和translate 两个方法的研究
  15. 如何合理运用激励模式,实现有效激励
  16. Java中的继承与接口
  17. you-get使用教程
  18. 使用计算机如何清零,怎样清除电脑所有数据_如何清空电脑所有数据
  19. 小学英语教学与计算机结合论文,浅谈小学英语语音教学与信息技术之结合
  20. 国外国内网盘下载利器 Mipony (网盘下载器)

热门文章

  1. dom node and html element,DOM parentNode和parentElement之间的区别
  2. 万圣节头像挂件生成微信小程序源码【源码好优多】
  3. python函数中经常出现的*args和**kw是什么?
  4. BS EN 2825 烟雾密度测定
  5. 【Comsol学习】二维稳态热传导问题
  6. 香蕉派Pro耳机接口噪音解决办法
  7. CF1045C Hyperspace Highways(圆方树板子)
  8. 推荐一下较出名的国外程序员论坛
  9. Expression 表达式目录树一
  10. 【网络】网络基础知识详解