`
qilixiang012
  • 浏览: 203087 次
文章分类
社区版块
存档分类
最新评论

android NFC 程序设计

 
阅读更多

NFC简介

NFC是Near Field Communication缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非

接触式识别和互联技术,可以在移动设备、消费类电子产品、

PC 和智能控件工具间进行近距离无线通信。

13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通

过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI

TS 102 190标准。NFC采用主动和被动两种通信模式。

手机NFC支持三种工作模式:读/写标签模式,点到点模式,模拟卡片模式。


NFC的基本类

Android平台提供了两个android.nfc 和android.nfc.tech包,里面有API来实现NFC标签的操作。

android.nfc包的主要有4个类:

NfcManager类:可以用来管理Android设备中指出的所有NFC Adapter,但由于大部分Android设备只支持一个NFC

Adapter,可以直接使用getDefaultAapater方法来获取系统支持的Adapter。

NfcAdapter类:本设备的NFC adapter,可以定义Intent来请求将系统检测到tags的提醒发送到你的Activity,并提供方

法去注册前台tag提醒发布和前台NDEF推送。

NdefMessage类:NDEF是NFC论坛定义的数据结构,用来有效的存数据到标签中,如文本,URL,和其他MIME类

型。一个NdefMessage扮演一个容器,这个容器存哪些发送和读到的数据。一个NdefMessage对象包含0或多个

NdefRecord,每个NDEF record有一个类型,比如文本,URL,智慧型海报/广告,或其他MIME数据。在

NDEFMessage里的第一个NfcRecord的类型用来发送tag到一个android设备上的activity。

Tag类:标示一个被动的NFC目标,比如tag,card,钥匙挂扣,甚至是一个电话模拟的的NFC卡。可提供对标签的各

种操作方法。

android.nfc.tech包

android.nfc.tech包含那些对tag查询属性和进行I/O操作的类。这些类分别标示一个tag支持的不同的NFC技术标准。

TagTechnology: 这个接口是下面所有tag technology类必须实现的。

NfcA: 支持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格式的标签进行读写操作。

NdefFormatable: 对那些可以被格式化成NDEF格式的tag提供一个格式化的操作。

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

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


NFC编程基本步骤

设置权限

限制版本号

限制安装的设备

定义可接收Tag的Activity(可获得标签的相关信息)

处理业务(根据便签的具体业务)


NFC标签过滤系统




NfcManager类详解:

Use getSystemService(java.lang.String) with NFC_SERVICE to create an NfcManager, then call getDefaultAdapter() to obtain the NfcAdapter.

Alternately, you can just call the static helper getDefaultAdapter(android.content.Context).

public static NfcAdapter getDefaultAdapter (Context context):获取手机中默认的NFC设备,一般一部手机就只有一

个NFC模块,所有调用此方法即可。


NfcAdapter类详解:

重要的常量(用于从Intent中获取获取信息,这个Intent是NFC检测到Tag后由系统发起的,由getIntent().getParcelableExtra(NfcAdapter.常量名);方法获取相应对象):

EXTRA_TAG(必须的):它是一个代表了被扫描到的标签的Tag对象;可通过

getParcelableExtra(NfcAdapter.EXTRA_TAG)获得标签对象。

EXTRA_NDEF_MESSAGES(可选):它是一个解析来自标签中的NDEF消息的数组。这个附加信息是强制在Intent对

象上的;可通过 getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)获得NDEF消息。

EXTRA_ID(可选):标签的低级ID。

以下三个常量用于对获取的Intent中的Tag类型进行判断:

ACTION_NDEF_DISCOVERED:NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())

ACTION_TAG_DISCOVERED:NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())

ACTION_TECH_DISCOVERED:NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())

重要方法:

public boolean isEnabled ():用于判断当前NFC是否处于可用状态

public void enableForegroundDispatch (Activity activity, PendingIntent intent, IntentFilter[] filters, String[][]

techLists):Enable foreground dispatch to the given Activity.用于打开前台调度(拥有最高的权限),当这个Activity

位于前台(前台进程),即可调用这个方法开启前台调度,一般位于onResume()回调方法中

public void disableForegroundDispatch (Activity activity):关闭前台调度,一般位于onPause()回调方法中


NdefMessage类详解:

以下三个方法用于构造一个NDEF数据 结构的的Tag数据(用于在Activity与标签之间的数据传递,读取与写入都要用

该对象进行封装)

public NdefMessage (byte[] data)

public NdefMessage (NdefRecord record, NdefRecord... records)

public NdefMessage (NdefRecord[] records)

public byte[] toByteArray ():

public int getByteArrayLength ():

public NdefRecord[] getRecords ():Get the NDEF Records inside this NDEF Message.


NdefRecord类详解:

以下两个为构造方法:

public NdefRecord (short tnf, byte[] type, byte[] id, byte[] payload):

public NdefRecord (byte[] data):

以下四个方法获取NdefRecord对象对应字段的类型:

public byte[] getType ():

public short getTnf ():

public byte[] getPayload ():

public byte[] getId ():


Tag类详解:

public String[] getTechList ():Get the technologies available in this tag, as fully qualified class names.


Ndef类详解:

该类用于对NDEF格式的Tag进行读写操作的封装,不同的Tag用不同的类封装,都在android.nfc.tech包中

public static Ndef get (Tag tag):Get an instance of Ndef for the given tag.构建对象

public void connect ():Enable I/O operations to the tag from this TagTechnology object.,打开I/O操作

public boolean isWritable ():Determine if the tag is writable.判断是否可写

public int getMaxSize ():Get the maximum NDEF message size in bytes.

public void writeNdefMessage (NdefMessage msg):Overwrite the NdefMessage on this tag.向这个Tag写入数据

public String getType ():Get the NDEF tag type.

public boolean makeReadOnly ():Make a tag read-only.


NdefFormatable类详解

用于将其他类型的格式格式化成Ndef格式

public static NdefFormatable get (Tag tag):Get an instance of NdefFormatable for the given tag.Returns null if

NdefFormatable was not enumerated in getTechList(). This indicates the tag is not NDEF formatable by this Android

device.

public void connect ():Enable I/O operations to the tag from this TagTechnology object.

public void format (NdefMessage firstMessage):Format a tag as NDEF, and write a NdefMessage.


NFC前台调度

将处理NFC标签的权利交给某个窗口(优先级最高)

1、在onCreate()中获得NfcAdapter对象;

2、创建与该Activity关联的PendingIntent;

3、指定一个用于处理NFC标签的窗口;通常会在onResume()方法中采用nfcAdapter.enableForegroundDispatch()

来实现;

4、禁止窗口处理NFC标签。采用nfcAdapter.disableForegroundDispatch()来实现。


前台调度中onNewIntent方法的使用

如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。

launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法。

系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法。

onNewIntent()中的setIntent()和getIntent(),如果没有调用setIntent(intent),则getIntent()获取的数据将不是你所期望的。所以最好是调用setIntent(intent),这样在使用getIntent()的时候就不会有问题了。


权限设置

在你能访问一个设备的NFC硬件和正确的处理NFC的Intent之前,需要在AndroidManifest.xml中先声明下面的项:

1.NFC使用 <uses-permission> 元素来访问NFC硬件:

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

2.最小SDK版本需要设置正确, API level 9只包含有限的tag支持;用API level 10来实现对tag的广泛的读写支持。

<uses-sdk android:minSdkVersion=“10”/>

3. uses-feature 元素定义:你的程序可以再android市场里显示有NFC硬件。

<uses-feature android:name=“android.hardware.nfc” android:required=“true” />

4. NFC intent filter告诉android系统你的activity能处理NFC数据,可以定义1个或多个intent filter。



分享到:
评论

相关推荐

    Android 4.X手机/平板电脑程序设计入门、应用到精通_源代

    《Android 4.X手机/平板电脑程序设计入门、应用到精通(第2版)》9大特色: 丰富的Eclipse开发环境操作技巧,帮助初学者快速学会Eclipse的强大功能以及程序调试技术,同时讲解了很多程序编辑辅助功能,可大大提升...

    Android 4高级编程(第3版)源代码

     ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界  面在手机、平板电脑和电视上都引人注目  ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务  的相关知识  ◆ 解释了如何创建后台服务、通知和...

    nfcgate:适用于Android的NFC研究工具包应用程序

    NFCGate NFCGate是一个Android应用程序,旨在捕获,分析或修改NFC流量。 它可以用作研究工具来逆向设计协议或评估针对流量修改的协议安全性。注意该应用程序是由的的学生出于安全研究目的而开发的。 请不要将此应用...

    Android开发权威指南 第二版

    主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、可视化UI设计、对话框、Toast和通知栏(Notification)、Fragment、ActionBar、...

    Android 4高级编程(第3版)

    ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界 面在手机、平板电脑和电视上都引人注目 ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务 的相关知识 ◆ 解释了如何创建后台服务、通知和Cloud to ...

    Android 4高级编程(第3版).pdf 高清

    探讨了Android的UI原理、设计理念和UI API,使用户界面在手机、平板电脑和电视上都引人注目;介绍了创建基于地图的应用程序和使用基于位置的服务的相关知识;解释了如何创建后台服务、通知和Cloud to Device ...

    Android开发权威指南

    主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、可视化UI设计、对话框、Toast和通知栏(Notification)、Fragment、ActionBar、...

    Android 4高级编程(第3版).part1

    ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界 面在手机、平板电脑和电视上都引人注目 ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务 的相关知识 ◆ 解释了如何创建后台服务、通知和Cloud to ...

    Android 4高级编程(第3版).part2

    ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界 面在手机、平板电脑和电视上都引人注目 ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务 的相关知识 ◆ 解释了如何创建后台服务、通知和Cloud to ...

    Android 4高级编程(第3版).part3

    ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界 面在手机、平板电脑和电视上都引人注目 ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务 的相关知识 ◆ 解释了如何创建后台服务、通知和Cloud to ...

    RF,IC,NFC,S50F工具集

    ├─android │ Letao_src.rar │ MifareClassicTool-1.8.0.apk │ Mifare_安卓_IC卡_读写 Mifare Classic Tool_1.7.3.apk │ nfca.txt │ NFCa[NFC模拟].apk │ NFC_TEST_src.zip ├─CPU卡 │ CPU_卡技术-CH_4-非...

    Android-MifareClassicTool.zip

    Android-MifareClassicTool.zip,android nfc应用程序,用于读取、写入、分析等。mifare经典rfid标签。,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,...

    Android实现拍照及图片显示效果

    当应用需要使用相机、NFC等外设时,需要在AndroidManifest.xml中进行声明。 这样,当设备缺少这些外设时,应用商店的安装程序可以拒绝安装设备。 声明示例代码如下: &lt;uses-feature android:name=android....

    nfc-project

    MIFARE Ultralight C上的NFC票证设计为一个小型运营商设计一个智能卡票务应用程序,该应用程序使用廉价的空白智能卡作为票证介质,在将第一张票证发给卡时格式化卡,并使用支持NFC的手机或类似的Android设备进行票证...

    B4A 9.30 Retail.zip

    支持Android操作系统的所有功能和功能,如NFC,GPS,SQL,蓝牙,回调部分,短信,联系人,联系人列表......,USB和MTP端口,相机,办公文档格式,动态壁纸和小部件。或小部件,视频播放和录制,各种网络协议,各种...

    PN7150-Datasheet.pdf

    PN7150 针对快速设计导入进行了优化,随附 Linux、Android 和 WinIoT 驱动程序,并支持绝大多数常见平台,具体包括 Raspberry Pi 和 BeagleBone Black,以及任何采用兼容 Arduino 针座的板卡(Kinetis、LPCXpresso...

    无电池键盘解决方案,支持NFC的手机识别并连接-电路方案

    无电池键盘功能描述: 此解决方案使用近场通信 (NFC) 技术实现了无电池键盘。此解决方案的核心部分是可以由...提供 Android 测试工具和 InputMethod 应用程序 无电池键盘解决方案电路实验板PCB截图: 无电池键盘源码截图:

    快速的android开发:使用处理功能构建丰富的基于传感器的应用程序

    杰西·斯科特( Jesse Scott) ,艾米丽·卡尔艺术与设计大学和兰加拉学院互动设计与智能手机开发副教授快速Android开发成功地面向了从初学者到经验丰富的开发人员的广泛受众。 我向所有希望使用Processing开发...

    Contact-Transfer:Contact Transfer是一个Android应用程序,可帮助用户一键传输其联系信息。

    具备QR和NFC功能,无论您身处黑暗还是偏远地区,都可以依靠CT获得与新朋友(即刚遇到的男生或女生)保持联系所需的信息)。 演示: : 设计文档: : zh-CN forcehl heading Trello委员会: :

    车路云协同系统中移动APP设计开发与应用

    本文设计开发并测试了一款基于Android的智能辅助驾驶应用程序,该应用程序使用MQH协议与汽车通信,并使用HTTP协议与云端通信。在手机端实现了视频监控,遥控驾驶,自动泊车以及封闭园区内的叫车功能。...

Global site tag (gtag.js) - Google Analytics