nfc 近场通信

news/2024/11/8 0:41:07/
参考链接:
http://luhuajcdd.iteye.com/blog/1172488
http://developer.android.com/guide/topics/nfc/nfc.html
【NFC在android中的应用API】

Android 2.3 NFC简介

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

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

一个带有NFC支持的android设备通常是一个发起者。也可以作为NFC的读写设备。他将检测NFC tags并且打开一个Activity来处理. Android 2.3.3还有支持有限的P2P。

Tags分很多种,其中简单的只提供读写段,有的只能读。复杂的tags可以支持一些运算,加密来控制对tags里数据段的读写。甚至一些tags上有简单的操作系统,允许一些复杂的交互和可以执行一些代码。

Android 2.3加入了NFC(近场通讯)的支持

The NFC API is available in the android.nfc package. The key classes are:
  • NfcAdapter, which represents the NFC hardware on the device.
  • NdefMessage, which represents an NDEF data message, the standard format in which "records" carrying data are transmitted between devices and tags. Applications can receive these messages from ACTION_TAG_DISCOVERED Intents.
  • NdefRecord, delivered in an NdefMessage, which describes the type of data being shared and carries the data itself.
NFC communication relies on wireless technology in the device hardware, so support for the platform's NFC features on specific devices is determined by their manufacturers. To determine the NFC support on the current device, applications can call isEnabled() to query the NfcAdapter. The NFC API is always present, however, regardless of underlying hardware support.


To use the NFC API, applications must request permission from the user by declaring
<uses-permission android:name="android.permission.NFC"> in their manifest files.

Additionally, developers can request filtering on Android Market, such that their applications are not discoverable to users whose devices do not support NFC. To request filtering, add
<uses-feature android:name="android.hardware.nfc" android:required="true"> to the application's manifest.



NFC的应用场景有很多,但Android 2.3目前API只提供了电子标签阅读器功能。相信随着Android的版本升级,后续会增加很多应用场景和 API。
功能是少一点,但从无到有的第一步总是不容易的。从架构上看,至少有以下几部分的改动:
  • Android Framework层,为应用开发增加了相关API(即英文中的framework API)。
  • 协议层,增加NFC的协议栈(即英文中的NFC Stack)。
  • 硬件适配层,为硬件生产商提供适配接口,此层应该与NFC硬件的 Linux驱动通讯(实现方式待验证)。
工作流程是当支持NFC功能的手机或其他电子终端(后面简称手机)在用户开启NFC功能的时候,如果手机内置的NFC扫描器(相当于类NfcAdapter的功能)扫描到电子标签后,就会向相关用户程序发送ACTION_TAG_DISCOVERED的Intent,Itent的 extras架构中会包含NDEF(NFC Data Exchange Format)消息。如何处理此NDEF消息,就是用户程序的事情了。
NFC的API在android.nfc的包中提供,这个包主要提供三个大类,
其中:NfcAdapter描述的就是手机中的NFC硬件,Android 2.3中可以暂时理解为电子标签扫描器。
电子标签和扫描器中的消息通过NdefMessage来表示,这个类很简单,只是封装了NdefRecord。
每个NdefMessage中可以包含多个NdefRecord,通过类NdefMessage的方法getRecords() 可以查询到消息的所有NdefRecord。NdefRecord才是信息的真正载体,正确理解这个类是理解NFC技术的一个重点。
NFC的技术规范[url]http://www.nfc-forum.org/specs/spec_list/[/url]是理解这个类不可或缺的资料。

应用程序的编程思路是:
  • 通过android.nfc.NfcAdapter.getDefaultAdapter() 取得手机的objNfcAdapter
  • 通过objNfcAdapter.isEnabled()查询该手机是否支持NFC
  • 如果手机支持NFC,就申请接收ACTION_TAG_DISCOVERED 的Intent
  • 如果接收到ACTION_TAG_DISCOVERED,就提取NdefMessage,并在此基础上进而提取 NdefRecord,整个是一个消息解析过程

Android NFC 编程方法:
nfc最低支持的版本 : <uses-sdk android:minSdkVersion = "10" />
market隐藏(不支持的设备将不能在market上找到该应用): <uses-feature android:name = "android.hardware.nfc" android:required = "true" />
nfc需要的权限: <uses-permission android:name="android.permission.NFC">
nfc需要过滤的action:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
code:
NfcAdapter mNfcAdapter = NfcManager.getDefaultAdapter(); //获取NFC硬件Adapter
//判断是否支持NFC硬件
if(mNfcAdpater==null) {
Toast.makeText(this,"this is not hava a nfc adapter",0).show();
} else {
//注册Nfc接收到数据(ndef)后回调的两个方法
mNfcAdapter.setNdefPushMessageCallback(this,this);
mNfcAdapter.setOnNdefPushCompleteCallback(this,this);
}
@Override public NdefMessage CreateNdefMessage(NfcEvent event){
NdefMessage msg = new NdefMessage(new NdefRecord[]{});
return msg;
}
@Override public void onNdefPushCompleteCallback(NfcEvent event){
}
//NFC中Tag 标识一个NFC目标,
当一个tag被检测到,一个tag对象将被创建并且封装到一个Intent里,然后NFC 发布系统将这个Intent用startActivity发送到注册了接受这种Intent的activity里。你可以用getTechList()方法来得到这个tag支持的技术细节和创建一个android.nfc.tech提供的相应的TagTechnology对象。



http://www.ppmy.cn/news/547906.html

相关文章

android 4.4新功能介绍(Kitkat)

重要的行为变更 如果您之前发布过 Android 应用&#xff0c;请注意您的应用可能受到 Android 4.4 变化的影响。 如果您的应用从外部存储空间读取... 您的应用在 Android 4.4 上运行时无法读取外部存储空间上的共享文件&#xff0c;除非您的应用具有 READ_EXTERNAL_STORAGE 权…

Linux内核驱动目录功能说明

accessibility - 这些驱动提供支持一些辅助设备。在Linux 3.9.4中&#xff0c;这个文件夹中只有一个驱动就是盲文设备驱动。 acpi - Advanced Configuration and Power Interface&#xff0c;用来管理电源使用。 amba - Advanced Microcontroller Bus Architecture&#xff…

android-5.0新功能介绍(Lollipop)

多 SIM 卡支持 Android 5.1 添加了对同时使用多个蜂窝运营商 SIM 卡的支持。有了此功能&#xff0c;用户可以在具有两个或多个 SIM 卡插槽的设备上激活和使用额外的 SIM。 您可以通过 SubscriptionManager 类获取有关当前激活的 SIM 的信息&#xff0c;包括设备是否被认为在当…

android nfc settimeout,4.5.3 ENABLE_NETWORK命令处理

ENABLE_NETWORK命令由wpa_supplicant_ctrl_iface_enable_network进行处理,其代码如 下所示。 **ctrl_iface.c::wpa_supplicant_ctrl_iface_enable_network** ~~~ static int wpa_supplicant_ctrl_iface_enable_network(struct wpa_supplicant *wpa_s,char *cmd) {int id; st…

WLAN(Wireless Local Area Network)——无线局域网

目录 一、WLAN基础 1.分类 2.各种无线网络技术应用 3.WLAN的定义 4.WLAN技术标准 &#xff08;1&#xff09;802.11 &#xff08;2&#xff09;802.11b &#xff08;3&#xff09;802.11a &#xff08;4&#xff09;802.11g &#xff08;5&#xff09;802.11n &#…

盘点Windows 8.1中隐藏着的25个秘密功能

Windows 8.1正式版问世&#xff0c;带来了众多大家早已耳熟能详的“开始按钮”、“分屏显示”等功能。事实上&#xff0c;Windows 8.1贴心的设计细节有很多&#xff0c;多数细节隐藏于系统中某个不起眼的角落&#xff0c;科技网站PC World便对此进行了深挖和罗列。全文如下&…

计算机印屏幕功能无法使用,计算机电脑管家多屏协同功能无法使用

说明&#xff1a;MateBook/MateBook D/MateBook E/MateBook E 2019 不支持多屏协同功能。 问题现象 在电脑管家使用多屏协同功能时&#xff0c;出现以下情况&#xff1a; 1. 计算机不弹框&#xff0c;无投屏窗口&#xff1b; 2. 多屏协同窗口弹出后加载不全&#xff0c;点击重新…

android beam小米,不看不知道!小米5手机上的NFC功能居然有这么多用途

随着智能手机行业的飞速发展&#xff0c;智能手机的内置功能也越来越多&#xff0c;前段时间有场发布会重新定义了“黑科技”&#xff0c;这其中全功能NFC就被定义为了“黑科技”&#xff0c;然而NFC已经出现在手机上很多年了&#xff0c;不过由于当时的应用场景较少&#xff0…