Android NFC 开发介绍
AndroidNFCM1卡读写芯片卡读写(CPU卡读写)(RFID读写)

AndroidNFCM1卡读写芯⽚卡读写(CPU卡读写)(RFID读写)权限<uses-featureandroid:name="android.hardware.nfc"android:required="true"/><uses-permission android:name="android.permission.NFC"/>12345<activity android:name=".ReadTextActivity" android:launchMode="singleTop"><intent-filter><action android:name="android.nfc.action.TAG_DISCOVERED"/><action android:name="android.nfc.action.TECH_DISCOVERED" /><data android:mimeType="text/plain"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>12345678初始化在Activity#onCreate()注册,在Activity#onResume()开启前台调度系统,在Activity#onPause退出前台调度。
11 onCreate( initNFC() )private void initNFC() {// 获取nfc适配器,判断设备是否⽀持NFC功能nfcAdapter = NfcAdapter.getDefaultAdapter(this);if (nfcAdapter == null) {shotToast("当前设备不⽀持NFC功能");} else if (!nfcAdapter.isEnabled()) {shotToast("NFC功能未打开,请先开启后重试!");}pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);ndef.addCategory("*/*");// 允许扫描的标签类型mWriteTagFilters = new IntentFilter[]{ndef};mTechLists = new String[][]{new String[]{MifareClassic.class.getName()},new String[]{NfcA.class.getName()}};// 允许扫描的标签类型}1234567891011121314151617182 onResume( )@Overrideprotected void onResume() {super.onResume();//开启前台调度系统nfcAdapter.enableForegroundDispatch(this, pendingIntent, mWriteTagFilters, mTechLists);}1234563 onPause()@Overrideprotected void onPause() {super.onPause();nfcAdapter.disableForegroundDispatch(this);}123454 NFC设备刷卡时触发 onNewIntent(Intent)给伪代码,详细见下⾯3点分解1@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);//当该Activity接收到NFC标签时,运⾏该⽅法if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()) ||NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);1,标签读写Ndef ndef = Ndef.get(tag);//如果ndef为空表⽰不⽀持该格式//可进⾏格式如果格式化失败则不能只能换个⽅式2,M1 扇区读写MifareClassic mfc = MifareClassic.get(tag);//CPU卡时 mfc将为空3,CPU卡读写NfcCpuUtilsnfc = new NfcCpuUtils(IsoDep.get(tag));}}1,标签读写/*** 写标签* @param ndef* @param tag* @param ndefMessage* @return* @throws IOException* @throws FormatException*/private boolean writeMsg(Ndef ndef, Tag tag, NdefMessage ndefMessage) throws IOException, FormatException { try {if (ndef == null) {shotToast("格式化数据开始");//Ndef格式类NdefFormatable format = NdefFormatable.get(tag);format.connect();format.format(ndefMessage);} else {shotToast("写⼊数据开始");//数据的写⼊过程⼀定要有连接操作ndef.connect();ndef.writeNdefMessage(ndefMessage);}return true;} catch (IOException e) {e.printStackTrace();shotToast("IO异常,读写失败");} catch (FormatException e) {e.printStackTrace();shotToast("格式化异常,读写失败");} catch (NullPointerException e) {shotToast("格NullPointerException异常,读写失败");}catch (IllegalStateException e){shotToast("Close other technology first!");}return false;}/*** 读取NFC标签⽂本数据*/private void readNfcTag(Intent intent) {if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())||NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);NdefMessage msgs[] = null;int contentSize = 0;if (rawMsgs != null) {msgs = new NdefMessage[rawMsgs.length];for (int i = 0; i < rawMsgs.length; i++) {msgs[i] = (NdefMessage) rawMsgs[i];contentSize += msgs[i].toByteArray().length;}}try {if (msgs != null) {print(msgs.length+" 长度");NdefRecord record = msgs[0].getRecords()[0];String textRecord = parseTextRecord(record);mTagText += textRecord + "\n\ntext\n" + contentSize + " bytes";print(mTagText);}} catch (Exception e) {}}}12,扇区读写M1扇区默认是没有密码的,但有部分⼈闲不住要把密码改了,因此认证过程要加密码,⼀般认证KeyA就⾏。
NFC技术介绍范文

NFC技术介绍范文NFC技术的工作原理非常简单。
设备A(例如智能手机)和设备B(例如支付终端)都配备了NFC芯片。
当设备A与设备B靠近时,它们之间就会建立一个NFC连接。
连接建立后,设备A可以向设备B发送指令和数据,设备B也可以向设备A发送响应和数据。
这个连接可以通过触摸、靠近或者扫描的方式建立。
NFC技术有许多应用领域,其中最常见的就是移动支付。
通过NFC技术,用户可以将自己的银行卡或者电子钱包信息存储在智能手机中,然后在商店里使用手机进行支付。
只需要将手机靠近支付终端,就可以完成支付过程,不再需要刷卡或者输入密码。
这种支付方式更加方便快捷,也更加安全,因为NFC连接是一种点对点的连接,数据传输过程中是加密的。
另一个常见的NFC应用是物联网(Internet of Things)。
通过将物体配备NFC芯片,可以实现物体之间的互联互通。
例如,在家中配备了NFC芯片的冰箱,可以与智能手机进行连接。
当用户在商店买菜时,可以通过手机上的应用程序查看冰箱里的食材情况,了解自己还缺少什么食材。
同时,用户也可以通过手机应用程序远程控制冰箱的温度和湿度。
这种互联互通的方式为生活带来极大的便利。
此外,NFC技术还可用于身份验证、门禁系统、公交卡和票务等领域。
例如,在一些企业或者学校,可以使用NFC卡进行门禁身份验证。
只需要将NFC卡靠近门禁刷卡器,就可以实现刷卡进入的功能。
在公共交通领域,NFC技术也被广泛应用。
许多城市使用NFC技术来实现刷卡乘车。
乘客只需要将智能卡或者手机靠近读卡器,就可以完成支付和进出站的操作。
总之,NFC技术是一种非常多功能的技术,它具有快速、安全、便捷等特点。
随着物联网的发展,NFC技术的应用前景也越来越广阔。
我们可以期待NFC技术在未来的应用领域获得更广泛的应用,为我们的生活带来更多便利。
nfc enablereadermode 参数

NFC(Near Field Communication)是一种近场通信技术,通过无线射频识别(RFID)的基础上发展而来,可以实现手机与NFC标签或设备之间的无线传输和数据交换。
NFC技术在移动支付、智能门禁、智能交通等领域有着广泛的应用。
在Android系统中,开发者可以通过NFC enableReaderMode参数实现对NFC功能的更加灵活和定制化的控制。
一、NFC enableReaderMode参数的概念NFC enableReaderMode参数是Android提供的一个API,可以用于在应用程序中启用NFC读卡器模式。
通过调用该参数进行配置,可以让应用程序在接收NFC数据时获得更多的控制权,包括对NFC标签传输的数据格式、传输协议和安全性的定制化设置。
二、NFC enableReaderMode参数的基本用法在Android应用程序中使用NFC enableReaderMode参数,首先需要在AndroidManifest.xml文件中声明NFC权限,并在应用程序中请求NFC权限。
通过调用NfcAdapter.enableReaderMode()方法启用NFC读卡器模式,并实现NfcAdapter.ReaderCallback接口以处理NFC标签传输的数据。
三、NFC enableReaderMode参数的主要功能1. 数据格式定制化通过NFC enableReaderMode参数可以实现对NFC标签传输数据格式的定制化设置,包括数据类型、数据长度、数据结构等。
开发者可以根据自身应用的需求,选择合适的数据格式,以便更加高效地处理NFC传输的数据。
2. 传输协议定制化NFC enableReaderMode参数还可以实现对NFC传输协议的定制化设置,包括传输速率、传输模式、传输频率等。
通过调整这些参数,可以使NFC传输更加稳定、可靠,提高数据传输的成功率和速度。
3. 安全性定制化在某些场景下,对NFC传输数据的安全性要求较高。
安卓手机nfc功能

安卓手机nfc功能NFC (Near Field Communication) 是一种无线技术,可以在非接触的情况下进行近距离通信。
它允许两台设备(例如智能手机和NFC标签或其他设备)之间通过简单的触摸或靠近连接和交换信息。
安卓手机的NFC功能提供了一系列方便的功能和用途,下面是一些常见的应用。
1. 门禁和支付:许多公共场所、办公室大楼和住宅建筑都采用了NFC门禁系统。
通过将支持NFC的手机靠近门禁读取器,用户可以轻松刷卡进入大楼或小区。
此外,越来越多的商店和支付机构支持NFC支付,用户只需将手机靠近POS机即可完成支付,无需携带实体信用卡。
2. 数据传输:NFC还可以用于快速传输文件、联系人、图片、音频或视频等数据。
用户只需将一个支持NFC的手机靠近另一个设备即可实现快速传输,这对于分享照片或文件非常方便。
3. 智能标签和标签:用户可以购买和使用NFC标签,将其贴在自己的家居设备、汽车、办公桌或其他位置,并使用手机上的NFC功能来控制这些设备。
例如,当用户离开家时,只需将手机靠近贴在门口的标签上,就会自动关闭照明和电器设备。
4. 票务和登机牌:越来越多的航空公司、音乐会和体育场馆开始采用NFC技术提供电子票务服务。
用户只需将手机放在读取器上,就可以快速扫描和验证电子票。
这种方式不仅方便用户,也可以减少传统纸质票据的浪费。
5. 交通卡和一卡通:很多城市都提供了NFC支持的交通卡,用户可以将其绑定到手机上,实现刷卡乘坐公交、地铁或火车。
此外,一些城市的商店和餐馆也支持使用NFC支付,用户只需将手机靠近POS机即可完成交易。
总结来说,安卓手机的NFC功能为用户带来了许多方便和创新的应用。
无论是门禁和支付、数据传输、智能标签、票务和登机牌,还是交通卡和一卡通,NFC技术都在改变着我们的生活方式,并提供更加便利、高效和智能的解决方案。
这个技术的应用前景非常广阔,将会在未来继续得到更广泛的应用。
NFC介绍及调试总结

NFC介绍及调试总结
NFC(近场通信)是一种短距离、高频率的无线通信技术,可以实现
设备之间的近距离通信和数据交换。
NFC技术基于RFID(射频识别)技术,并结合了主动和被动通信模式,可以在设备之间进行双向通信。
NFC技术
广泛应用于移动支付、电子身份认证、智能门锁、公交卡等领域。
在进行NFC调试时,需要掌握以下几个关键点:
1.硬件设备:进行NFC调试首先要确保设备上具有NFC芯片。
现如今,大部分智能手机都内置了NFC芯片,因此通常可以直接在手机上进行调试。
如果需要在其他设备上进行调试,可以考虑使用额外的NFC模块。
3.NFCAPI:不同操作系统和平台提供了不同的NFCAPI,用于开发和
调试NFC应用程序。
在进行调试之前,需要熟悉所使用的操作系统和平台
的NFCAPI,并掌握相关的函数和接口。
4.调试工具:进行NFC调试时,可以使用一些常见的调试工具,如NFC读写器、NFC模拟器、NFC调试工具等。
这些工具可以帮助我们快速
进行调试,并定位和解决问题。
在进行NFC调试时,需要注意以下几个方面:
3.安全性:NFC应用中的数据传输往往涉及到安全性问题。
在进行调
试时,需要考虑和验证数据的安全性,以防止数据泄露、篡改和其他安全
风险。
NFC介绍及调试总结

NFC介绍及调试总结目录1 介绍 (2)1.1 基本介绍 (2)1.2 芯片介绍 (3)1.3 名词解释 (4)1.4 硬件连接示意图 (5)1.5 NFC SW OVERVIEW (6)1.6 参考文档 (6)2 QCA HAL层分析 (7)3 PN547 HAL层移植 (9)4 PN547 Kernel 层移植 (12)5 PN547 driver 关键接口分析 (13)5.1 probe函数 (13)5.2 pn547_dev_read函数 (14)5.3 pn547_dev_write函数 (15)5.4 pn547_dev_ioctl函数 (16)6 问题记录 (17)1 介绍1.1 基本介绍近场通信(英语:Near Field Communication,NFC),又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输,在几十厘米内交换数据。
这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。
近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内[1]。
其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。
目前近场通信已通过成为ISO/IEC IS 18092国际标准、EMCA-340标准与ETSI TS 102 190标准。
NFC采用主动和被动两种读取模式。
按照工作模式分:可以分为“卡模拟”模式,“点对点”模式,“读卡器”模式卡模拟模式(Card emulation mode):这个模式其实就是相当于一张采用RFID技术的IC卡。
可以替代现在大量的IC卡(包括信用卡)商场刷卡、悠游卡、门禁管制,车票,门票等等。
此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的RF域来供电,即便是寄主设备(如手机)没电也可以工作。
IC卡读卡器Android开发指南

友我科技NFC读写器andriod开发指南支持IC卡读卡器在andriod中应用,andriod4.0及以上随着Android系统的设备越来越多,在Andriod设备上使用NFC读写器变得越来越广泛。
为了将NFC读写器应用android设备上,友我科技独立研发了NFC读写器的android开发包,使用此开发包,工程师只需在工程中导入jar 包,使用java语言就可以轻松的开发出Android下的NFC读写器应用APP。
友我科技NFC读写器Android开发包相关信息:NFC读写器Android开发指南在所有API接口中有3种返回值,说明如下:第一种:void, 无任何返回值第二种:int,返回整形,>=0为成功,<0为失败第三种:byte[], byte数组,如果为null则为失败,只要不为null,就是执行成功首先在工程中导入yoworfidreader.jar接口包,同时在在order and Export中选中yoworfidreader.jar 包,这样可以随着你的应用程序一起发布。
然后再自己的工程中创建usbreader的object,如下所示:public usbreader rfidreader;rfidreader = new usbreader();只要rfidreader!=null,就可以使用了。
类usbreader的属性:类usbreader的方法:1. void TryUSB(Context context)TryUSB方法的作用是尝试连接USB设备,在android系统下,连接USB设备会出现权限的提示窗口,需要此时点击是按钮。
rfidreader.TryUSB(this);2. boolean Initial(Context context)Initial方法的作用是初始化 NFC读写器,只有经过初始化后才能对读卡器进行其他操作。
初始化成功返回true,失败返回false。
基于Android的NFC编程技术研究及应用

基于Android的NFC编程技术研究及应用陈三清【期刊名称】《《无线互联科技》》【年(卷),期】2019(016)021【总页数】3页(P30-31,38)【关键词】近距离无线通信; Tag标签; Android; 近距离无线通信编程【作者】陈三清【作者单位】攀枝花学院数学与计算机学院四川攀枝花 617000【正文语种】中文近年来,随着通信技术的发展和智能设备的普及,近距离无线通信(Near Field Communication,NFC)技术在门禁管理、信用卡、物流管理、非接触式移动支付、登机验证、智慧海报及广告、设备间数据传输等众多方面得到了广泛应用。
与射频识别(Radio Frequency IDentification,RFID)类似,NFC信息是通过频谱中无线频率部分的电磁感应耦合方式进行传输,但传输范围要比RFID小,不超过1 m,实际应用通常在10 cm之内,不需要电源,相比蓝牙来说,具有成本低、耗电量低、较高保密性和安全性的特点,是在近距离通信领域和场合下对蓝牙技术的一种有益补充。
1 NFC通信简介RFID是NFC无线通信的核心技术,通过无线电信号识别特定目标并读写相关数据,而无须系统与特定目标之间建立机械地或者光学接触[1]。
从概念上讲,RFID 类似于条码扫描,条码技术是将已编码的条形码附着于目标物,并使用专用的扫描器读写器,利用光信号将信息由条形磁传送到扫描读写器[2]。
RFID使用专门的RFID读写器及专门的可附着于目标物的RFID标签,利用频率信号将信息由RFID 标签传送至RFID读写器。
其基本工作原理是[3]:当标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送存储在芯片中的产品信息,即无源标签或被动标签,Passive Tag,或者由标签主动发送某一频率的信号,即有源标签或主动标签,Active Tag,解读器读取信息并解码后,送至中央信息系统进行有关数据处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
API概览API版本区别1.API level 9以前不支持NFC2.API level 9只包含有限的tag(标签)支持,包括:1).通过ACTION_TAG_DISCOVERED来发布Tag信息3).只有通过EXTRA_NDEF_MESSAGES扩展来访问NDEF消息3).其他的tag属性和I/O操作都不支持API level 10实现对tag的广泛的读写支持。
Android NFC API ReferenceNFC简洁近场通信(NFC)是一个短范围无线技术集合,通常需要4厘米或更短的距离才能初始化连接。
NFC允许在NFC标签和Android设备之间或两个Android设备之间共享小的数据的负载。
NFC标签具有复杂的分类。
简单的NFC标签只提供读写语法,某些时候一次只能以只读的方式读取卡片的可编程区域。
复杂一点的NFC标签提供了数学运算能力,而且有加密的硬件来认证对一个扇区的访问。
最复杂的NFC标签包含了运算环境,允许在标签上执行复杂的交互代码。
存储在标签中的数据也可以用各种格式来编写,但是大多数的Android框架API都使用基于NDEF(NFC Data Exchange Format)的标准。
1.NFC基础本文介绍在Android系通过你所能执行的基本任务。它解释了如何用NDEF消息格式来发送和接收NFC 数据,并且介绍了支持这些功能的Android框架API。有关更高级的话题,包括对非NDEF格式数据的讨论,情况“高级NFC” NDEF数据和Android一起工作的场景主要有两个:1.从NFC标签中读取NDEF数据; 【读数据】2.把NDEF消息从一个设备发送给另一个设备。【数据传递】从NFC标签中读取NDEF数据是用标签调度系统来处理的,它会分析被发现的NFC标签,对数据进行适当的分类,并启动对该类数据感兴趣的应用程序。想要处理被扫描到NFC标签的应用程序会声明一个Intent过滤器,并请求处理数据。Android Beam™ 功能允许设备把一个NDEF消息推送到物理/硬件上相互监听的另一个设备上。这种交互提供了比其他无线技术(如蓝牙)更容易的发送数据的方法。因为NFC不需要手动的设备发现或配对要求,两个设备在接近到一定范围时会自动的连接。Android Beam通过一组NFC API来使用,以便应用程序能够在设备之间来传输信息。例如,通信录、浏览器以及YouTube等应用程序都使用Android Beam来跟其他设备共享通信录、网页和视频。1.1 NFC标签调度系统(The Tag Dispatch System)通常,除非是在设备的设置菜单中NFC被禁用,否则Android设备会在非锁屏的状态下搜索NFC。当Android设备发现NFC标签时,期望的行为是用最合适的Activity来处理该Intent,而不是询问用户使用什么应用程序。因为设备只能在很短的范围内扫描到NFC标签,强制的让用户手动的选择一个Activity,会导致设备离开NFC标签,从而中断该连接。你应该开发你自己的Activity来处理你所关心的NFC标签,从而阻止选择器的操作。为了帮助你达到这个目标,Android提供了特殊的标签调度系统,来分析扫描到的NFC标签,通过解析数据,在被扫描到的数据中尝试找到感兴趣的应用程序,具体做法如下:1.解析NFC标签并搞清楚标签中标识数据负载的MIME类型或URI;2.把MIME类型或URI以及数据负载封装到一个Intent中。3.基于Intent来启动Activity。1.1.1 怎样把NFC标签映射到MIME类型和URI开始编写NFC应用程序之前,重要的是要理解不同类型的NFC标签、标签调度系统是如何解析NFC标签的、以及在检测到NDEF消息时,标签调度系统所做的特定的工作等。NFC标签涉及到广泛的技术,并且有很多不同的方法向标签中写入数据。Android支持由NFC Forum所定义的NDEF标准。NDEF数据被封装在一个消息(NdefMessage)中,该消息中包含了一条或多条记录(NdefRecord)。每个NDEF记录必须具有良好的你想要创建的记录类型的规范的格式。Android也支持其他的不包含NDEF数据类型的标签,你能够使用android.nfc.tech包中的类来工作。要使用其他类型标签来工作,涉及到编写自己的跟该标签通信的协议栈,因此我们建议你尽可能的使用NDEF,以便减少开发难度,并且最大化的支持Android 设备。注意:要下载完整的NDEF规范,请去“NFC论坛规范下载”网址来下载。现在,你已经具备了一些NFC标签的背景知识,接下来要详细的介绍Android是如何处理NDEF格式的标签的。当Android设备扫描到包含NDEF格式数据的NFC标签时,它会解析该消息,并尝试搞清楚数据的MIME 类型或URI标识。首先系统会读取消息(NdefMessage)中的第一条NdefRecord,来判断如何解释整个NDEF消息(一个NDEF消息能够有多条NDEF记录)。在格式良好的NDEF消息中,第一条NdefRecord包含以下字段信息:1)3-bit TNF(类型名称格式) 指示如何解释可变长度类型字段,在下表1中介绍有效值。2)可变长度类型说明记录的类型,如果使用TNF_WELL_KNOWN,那么则使用这个字段来指定记录的类型定义(RTD)。在下表2中定义了有效的RTD值。3)可变长度ID 唯一标识该记录。这个字段不经常使用,但是,如果需要唯一的标识一个标记,那么就可以为该字段创建一个ID。4)可变长度负载你想读/写的实际的数据负载。一个NDEF消息能够包含多个NDEF记录,因此不要以为在NDEF消息的第一条NDEF记录中包含了所有的负载。标签调度系统使用TNF和类型字段来尝试把MIME类型或URI映射到NDEF消息中。如果成功,它会把信息跟实际的负载一起封装到ACTION_NEDF_DISCOVERED类型的Intent中。但是,会有标签调度系统不能根据第一条NDEF记录来判断数据类型的情况,这样就会有NDEF数据不能被映射到MIME类型或URI,或者是NFC 标签没有包含NDEF开始数据的情况发生。在这种情况下,就会用一个标签技术信息相关的Tag对象和封装在ACTION_TECH_DISCOVERED类型Intent对象内部的负载来代替。表1.介绍标签调度系统映射如何把TNF和类型字段映射到MIME型或URI上。同时也介绍了那种类型的TNF不能被映射到MIME类型或URI上。这种情况下,标签调度系统会退化到ACTION_TECH_DISCOVERED类型的Intent对象。例如,如果标签调度系统遇到一个TNF_ABSOLUTE_URI类型的记录,它会把这个记录的可变长度类型字段映射到一个URI中。标签调度系统会把这个URI跟其他相关的标签的信息(如数据负载)一起封装到ACTION_NDEF_DISCOVERED的Intent对象中。在另一方面,如果遇到了TNF_UNKNOWN类型,它会创建一个封装了标签技术信息的Intent对象来代替。1.1.2 应用程序如何调度NFC标签当标签调度系统完成对NFC标签和它的标识信息封装的Intent对象的创建时,它会把该Intent对象发送给感兴趣的应用程序。
如果有多个应用程序能够处理该Intent对象,就会显示Activity选择器,让用户选择Activity。
标签调度系统定义了三种Intent对象,以下按照由高到低的优先级列出这三种Intent对象:1. ACTION_NDEF_DISCOVERED: 这种Intent用于启动包含NDEF负载和已知类型的标签的Activity。
这是最高优先级的Intent,并且标签调度系统在任何其他Intent之前,都会尽可能的尝试使用这种类型的Intent 来启动Activity。
2. ACTION_TECH_DISCOVERED: 如果没有注册处理ACTION_NDEF_DISCOVERED类型的Intent的Activity,那么标签调度系统会尝试使用这种类型的Intent来启动应用程序。
如果被扫描到的标签包含了不能被映射到MIME类型或URI的NDEF数据,或者没有包含NDEF数据,但是是已知的标签技术,那么也会直接启动这种类型的Intent对象(而不是先启动ACTION_NDEF_DISCOVERED类型的Intent)3. ACTION_TAB_DISCOVERED: 如果没有处理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED类型Intent的Activity,就会启动这种类型的Intent。
标签调度系统的基本工作方法如下:1.用解析NFC标签时由标签调度系统创建的Intent对象(ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED)来尝试启动Activity;2.如果没有对应的处理Intent的Activity,那么就会尝试使用下一个优先级的Intent(ACTION_TECH_DISCOVERED或ACTION_TAG_DISCOVERED)来启动Activity,直到有对应的应用程序来处理这个Intent,或者是直到标签调度系统尝试了所有可能的Intent。
3. 如果没有应用程序来处理任何类型的Intent,那么就不做任何事情。
在可能的情况下,都会使用NDEF消息和ACTION_NDEF_DISCOVERED类型的Intent来工作,因为它是这三种Intent中最标准的。
这种Intent与其他两种Intent相比,它会允许你在更加合适的时机来启动你的应用程序,从而给用户带来更好的体验。
图1. 标签调度系统1.2 在Android的Manifest中申请NFC访问在访问设备的NFC硬件和正确的处理NFC的Intent之前,要在AndroidManifest.xml文件中进行以下声明:1. 在<uses-permission>元素中声明访问NFC硬件:<uses-permission android:name="android.permission.NFC" />2. 你的应用程序所支持的最小的SDK版本。
API Level 9只通过ACTION_TAG_DISCOVERED来支持有限的标签调度,并且只能通过EXTRA_NDEF_MESSAGES来访问NDEF消息。
没有其他的标签属性或I/O操作可用。
API Level 10中包含了广泛的读写支持,从而更好的推动了NDEF的应用前景,并且API Leve 14用Android Beam 和额外的方便的创建NDEF记录的方法,向外提供了更容易的把NDEF消息推送给其他设备的方法。