Android NFC 开发介绍

合集下载

AndroidNFCM1卡读写芯片卡读写(CPU卡读写)(RFID读写)

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技术介绍范文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 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功能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(近场通信)是一种短距离、高频率的无线通信技术,可以实现
设备之间的近距离通信和数据交换。

NFC技术基于RFID(射频识别)技术,并结合了主动和被动通信模式,可以在设备之间进行双向通信。

NFC技术
广泛应用于移动支付、电子身份认证、智能门锁、公交卡等领域。

在进行NFC调试时,需要掌握以下几个关键点:
1.硬件设备:进行NFC调试首先要确保设备上具有NFC芯片。

现如今,大部分智能手机都内置了NFC芯片,因此通常可以直接在手机上进行调试。

如果需要在其他设备上进行调试,可以考虑使用额外的NFC模块。

3.NFCAPI:不同操作系统和平台提供了不同的NFCAPI,用于开发和
调试NFC应用程序。

在进行调试之前,需要熟悉所使用的操作系统和平台
的NFCAPI,并掌握相关的函数和接口。

4.调试工具:进行NFC调试时,可以使用一些常见的调试工具,如NFC读写器、NFC模拟器、NFC调试工具等。

这些工具可以帮助我们快速
进行调试,并定位和解决问题。

在进行NFC调试时,需要注意以下几个方面:
3.安全性:NFC应用中的数据传输往往涉及到安全性问题。

在进行调
试时,需要考虑和验证数据的安全性,以防止数据泄露、篡改和其他安全
风险。

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开发指南

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编程技术研究及应用

基于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,解读器读取信息并解码后,送至中央信息系统进行有关数据处理。

NFC技术介绍

NFC技术介绍
NFC技术
近场通信(Near Field Communication,NFC), 又称近距离无线通信,是一种短距离的高频无线 通信技术,允许电子设备之间进行非接触式点对 点数据传输(在十厘米内)交换数据。这个技术 由免接触式射频识别(RFID)演变而来,并向下 兼容RFID,最早由Sony和Philips开发成功,主要 用于手机等手持设备中提供M2M(Machineto Machine)的通信。由于近场通讯具有天然的安全 性,因此,NFC技术被认为在手机支付等领域具有 很大的应衣机、空调,小至手机、相机都有相 应的产品。松下的家电风格也比较进取,经常会有一 些意想不到的设计。而今天要介绍的新玩意就是松下 把他们的产品通过新技术NFC连接了起来,运用 Android手机控制各种家电。这也体现出NFC逐渐走进 我们的生活,越来越多厂商利用手机上的NFC实现各 种新奇、实用的功能。 日前松下公司开发了一个新的Android应用,把这 个应用装到手机上,就可以实现对家电的控制。当然, 你要先拥有一台有NFC功能的Android手机,再购买特 定型号的松下家电。
NFC功能实例分析
事例一:三星利用NFC推Holiday Inn酒店服务App 在智能手机上的NFC功能可以做的不仅仅是简单 的无线电子支付、近距离接触连接设备,还可以在做 一些之前做不到的事。短程无线技术(NFC近场通讯) 扩展了支付方式和购物本身的新道路。而现在,它似 乎还可以帮你把门打开。
事例二:松下实现用手机控制家电
应用视频
/v_show/id_XMjU2N zU5NDcy.html /v_show/id_XNTM5O TIzOTcy.html
NFC手机到底还有什么用?
目前NFC技术在手机上应用主要有以下五类。 1.接触通过,如门禁管理、车票和门票等,用户将储存着票证或 门控密码的设备靠近读卡器即可,也可用于物流管理。 2.接触支付,如非接触式移动支付,用户将设备靠近嵌有NFC模 块的POS机可进行支付,并确认交易。 3.接触连接,如把两个NFC设备相连接,进行点对点数据传输, 例如下载音乐、图片互传和交换通讯录等。 4.接触浏览,用户可将NFC手机接靠近街头有NFC功能的智能公 用电话或海报,来浏览交通信息等。 5.下载接触,用户可通过GPRS网络接收或下载信息,用于支付 或门禁等功能,如前述,用户可发送特定格式的短信至家政服务 员的手机来控制家政服务员进出住宅的权限。

Android上NFC应用API介绍以及部分NFC知识整合

Android上NFC应用API介绍以及部分NFC知识整合

NFC(近场通信)NFC是一套短距离的无线通信,通常距离是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上有简单的操作系统,允许一些复杂的交互和可以执行一些代码。

API概览Android.nfc package包含顶层类用来与本地NFC适配器交互. 这些类可以表示被检测到的tags和用NDEF数据格式。

声明Android Manifest.xml的元素在你能访问一个设备的NFC硬件和正确的处理NFC的Intent之前,需要在AndroidManifest.xml中先声明下面的项:1.NFC使用<uses-permission>元素来访问NFC硬件:<uses-permission android:name="android.permission.NFC"/>2.最小SDK版本需要设置正确,API level 9只包含有限的tag支持,包括:.通过ACTION_TAG_DISCOVERED来发布Tag信息.只有通过EXTRA_NDEF_MESSAGES扩展来访问NDEF消息.其他的tag属性和I/O操作都不支持所以你可能想要用API level 10来实现对tag的广泛的读写支持。

nfc应用介绍及案例

nfc应用介绍及案例

4、标签类型4
类型4与类型1类似,是由NXP DESFire标签衍生而来的。 基于ISO-14443A标准 在生产时定义可读,可重写或只读的属性。 可变内存,每个服务最大32kB 支持三种传输速率: 106,212或424kbits/s 支持数据冲突保护 市场上有兼容的产品 :NXP DESFire, SmartMX-JCOP
NFC相关规范介绍
ISO 14443
ISO 14443是著名的国际标准,原来是为非接触芯片卡片在 13.56MHz无线电通信设计的。ISO 14443 从无线层到命令 协议定义了一个协议栈。无线层ISO14443-2有两个版本, 具有不同的调制和bit编码方法。称为A,B版。类似的, ISO 14443指定了两个版本的包框架和底层协议部分(ISO 14443-3)。 ISO协议栈的最高层定义了传输信息的命令接 口(ISO 14443-4)。
3、模拟卡片
支持NFC的手机在与标签交互时扮演读取器的角色。在这种模式手机也可做为标签或被 读取的无线卡片。
NDEF介绍
• • • 为实现标签和NFC设备,及NFC设备之间的交互通信,NFC论坛(NFC FROUM)定义了称为NFC数据交换 格式(NDEF)的通用数据格式。 NDEF是轻量级的紧凑的二进制格式,可带有URL,vCard和NFC定义的各种数据类型。 NDEF使得NFC的各种功能能容易的中使用各种支持的标签类型传输数据,因为NDEF封装了标签的种 类细节信息,使得应用不用关心与何种标签在通信。
• • •

RTD 记录类型定义
NFC论坛定义了几种优化的记录类型,用在NDEF记录中。每个NFC论坛记录类型定义在记录类型定 义(RTD)文档中
• • • • • •

HarmonyOS-NFC开发指南

HarmonyOS-NFC开发指南

道。
9. 调用 Reader 类的 closeSeSessions()接口关闭安全单元的所有 Session。
10.
调用 SEService 类的 shutdown()接口关闭安全单元服务。
private
class
AppServiceConnectedCallback
implements
SEService.OnCallback {
TagInfo
tagInfo
=
getIntent().getParcelableExtra(NfcController.EXTRA_TAG_INFO);
// 查询 Tag 设备支持的技术或协议,返回值为支持的技术或协议列表 int[] profiles = tagInfo.getTagSupportedProfiles();
// 查询 Tag 连接状态 boolean isConnected= tagNfcA.isTagConnected();
// 发送数据到 Tag,返回值为 Tag 的响应数据 byte[] data = {0x13, 0x59, 0x22}; byte[] response = tagNfcA.sendData(data);
3. 调用 getReaders()接口,获取本机的全部安全单元。
4. 调用 Reader 类的 openSession()接口打开 Session,返回一个打开的
Session 实例。
5. 调用 Session 类的 openBasicChannel(aid)接口打开基础通道,或者调用
openLogicalChannel(aid)接口打开逻辑通道,返回一个打开通道 Channel
// 发送数据到 Tag,返回值为 Tag 的响应数据 byte[] data = {0x13, 0x59, 0x22}; byte[] response = mifareUltralightTag.sendData(data);

Android的近场通信

Android的近场通信

Android的近场通信NFCAndroid的近场通信---NFC概要近场通信(NFC)是一个短范围无线技术集合,通常需要4厘米或更短的距离才能初始化连接。

NFC允许在NFC标签和Android设备之间或两个Android设备之间共享小的数据的负载。

NFC标签具有复杂的分类。

简单的NFC标签只提供读写语法,某些时候一次只能以只读的方式读取卡片的可编程区域。

复杂一点的NFC标签提供了数学运算能力,而且有加密的硬件来认证对一个扇区的访问。

最复杂的NFC标签包含了运算环境,允许在标签上执行复杂的交互代码。

存储在标签中的数据也可以用各种格式来编写,但是大多数的Android框架API都使用基于NDEF(NFC Data Exchange Format)的标准。

Android近场通信---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来跟其他设备共享通信录、网页和视频。NFC标签调度系统通常,除非是在设备的设置菜单中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。怎样把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包含以下字段信息:3-bit TNF(类型名称格式)指示如何解释可变长度类型字段,在下表1中介绍有效值。可变长度类型说明记录的类型,如果使用TNF_WELL_KNOWN,那么则使用这个字段来指定记录的类型定义(RTD)。在下表2中定义了有效的RTD值。可变长度ID唯一标识该记录。这个字段不经常使用,但是,如果需要唯一的标识一个标记,那么就可以为该字段创建一个ID。可变长度负载你想读/写的实际的数据负载。一个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.所支持的TNF和它们的映射类型名称格式(TNF)映射TNF_ABSOLUTE_URI基于类型字段的URITNF_EMPTY退化到ACTION_TECH_DISCOVERED类型的Intent对象TNF_EXTERNAL_TYPE基于类型字段中URN的URI。URN是缩短的格式(<domain_name>:<service_name)被编码到NDEF类型中。Android会把这个URN映射成以下格式的URI:vnd.android.nfc://ext/<domain_name>:<service_name>。TNF_MIME_MEDIA基于类型字段的MIME类型TNF_UNCHANGED退化到ACTION_TECH_DISCOVERED类型的Intent对象TNF_UNKNOWN退化到ACTION_TECH_DISCOVERED类型的Intent对象TNF_WELL_KNOWN依赖你在类型字段中设置的记录类型定义(RTD)的MIME类型或URI,表2.TNF_WELL_KNOWN所支持的RTD和它们的映射记录类型定义(RTD)映射RTD_ALTERNATIVE_CARRIER退化到ACTION_TECH_DISCOVERED类型的Intent对象RTD_HANDOVER_CARRIER退化到ACTION_TECH_DISCOVERED类型的Intent对象RTD_HANDOVER_REQUEST退化到ACTION_TECH_DISCOVERED类型的Intent对象RTD_HANDOVER_SELECT退化到ACTION_TECH_DISCOVERED类型的Intent对象RTD_SMART_POSTER基于负载解析的URIRTD_TEXT text/plain类型的MIMERTD_URI基于有效负载的URI应用程序如何调度NFC标签当标签调度系统完成对NFC标签和它的标识信息封装的Intent对象的创建时,它会把该Intent对象发送给感兴趣的应用程序。

NFC简介(官方文档翻译)

NFC简介(官方文档翻译)

NFC基本原理本文档介绍了Android中NFC执行的基本任务。

它说明了如何发送和接收NDEF格式的NFC数据,并介绍了支持这些功能Android Framework APIs。

需要了解更多,其中包括与非NDEF数据工作的讨论,见高级NFC。

Android和NDEF数据的交互工作,有两个主要用途情况:•阅读来自NFC标签的NDEF数据•利用Android Beaming机制从一个设备到另一个设备发送NDEF消息阅读来自NFC标签的NDEF数据,是由标签调度系统来处理的,该系统分析发现NFC标签,适当的对数据进行分类,并启动一个对分类数据感兴趣的应用。

对要处理扫描NFC标签的应用程序可以声明一个意向筛选,并要求处理该数据。

通过同时触发另一台设备,Android Beaming机制的功能允许设备推送一个NDEF消息到另一台设备。

这种交互比其他无线技术如蓝牙,提供了一个简单的方法发送数据,因为通过NFC,无需手动发现或配对装置。

当两个设备靠近到一定程度时,自动连接。

可以通过一系列NFC APIs,Android Beaming机制都能起作用,所以任何应用都可以传输设备之间的信息。

例如,联系人,浏览器和YouTube应用程序通过使用Android Beaming机制,与其他设备来共享联系人,网页和视频。

一、标签发布系统除非NFC功能在设备的设置菜单中禁用,不然在屏幕未被锁定时,Android 设备通常是寻找NFC标签。

当一个Android设备发现了一个NFC标签,所期望的行为是,不询问用户使用什么样的应用,而是以最合适的activity处理意向。

由于设备扫描NFC标签是在很短的范围内,很容易让用户手动选择一个activity 而将迫使他们远离标签并断开连接。

你可以定制你的activity,只处理其关心的NFC标签,以阻止出现“Activity选择列表”。

为了帮助您实现这个目标,Android提供了一个特殊的标记发布系统,分析扫描NFC标签,解析它们,并试图找到对扫描数据感兴趣的应用。

Android使用手机NFC的读取NFC标签数据的方法

Android使用手机NFC的读取NFC标签数据的方法

Android使⽤⼿机NFC的读取NFC标签数据的⽅法⼀你需要准备的:⼀部有nfc的⼿机,⼀张有nfc标签的卡⼆ nfc简介nfc(近距离⽆线通讯技术),是由⾮接触式射频识别(RFID)及互连互通技术整合演变⽽来,通过在单⼀芯⽚上集成感应式读卡器、感应式卡⽚和点对点通信的功能,利⽤移动终端实现移动⽀付、电⼦票务、门禁、移动⾝份识别、防伪等应⽤。

三 nfc过滤标签的设置3-1 在Manifest添加权限:在xml⾥添加nfc的使⽤权限<uses-permission android:name="android.permission.NFC" />这个是限制安装权限,只给有nfc功能的⼿机安装(可选)<uses-feature android:name="android.hardware.nfc" android:required="true" />3-2 nfc的过滤⽅式有以下:ACTION_NDEF_DISCOVERED,ACTION_TECH_DISCOVERED,ACTION_TAG_DISCOVERED三种。

过滤器的作⽤是过滤掉杂质,剩下的就是我们需要的了。

这三种过滤⽅式可同时配置,可以⽐⽅成从上到下三层,只要是符合某⼀层过滤器要求的,过滤完就停⽌往下⼀层。

在Activity的filter⾥⾯添加对应需要的权限:ACTION_NDEF_DISCOVERED,<activity>...<intent-filter><action android:name="android.nfc.action.NDEF_DISCOVERED" /></intent-filter>...</activity>ACTION_TECH_DISCOVERED:在<project-root>/res/xml(⾃⼰新建xml⽂件夹)下新建⼀个nfc_tech_filter.xml⽂件,添加进你需要⽀持的标签类型。

Android近场通信---NFC基础(四)

Android近场通信---NFC基础(四)

A ndroid近场通信---NFC基础(四)从Intent中获取信息如果因为NFC的Intent而启动一个Activity,那么你就能够从Intent中获取被扫描到的NFC标签的相关信息。

根据被扫描到的标签,Intent对象能够以下额外的信息:1. EXTRA_TAG(必须的):它是一个代表了被扫描到的标签的Tag对象;2. EXTRA_NDEF_MESSAGES(可选):它是一个解析来自标签中的NDEF消息的数组。

这个附加信息是强制在Intent对象上的;3. {@link android.nfc.NfcAdapter#EXTRA_ID(可选):标签的低级ID。

要获取这些附加信息,就要确保你的Activity是被扫描到的NFC的Intent对象启动的,然后才能获得Intent之外的附加信息。

下例检查ACTION_NDEF_DISCOVERED类型的Intent,并从Intent对象的附加信息中获取NDEF消息。

public void onResume() {super.onResume();...if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {Parcelable[] rawMsgs =intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);if (rawMsgs != null) {msgs = new NdefMessage[rawMsgs.length];for (int i = 0; i < rawMsgs.length; i++) {msgs[i] = (NdefMessage) rawMsgs[i];}}}//process the msgs array}此外,你还能够从Intent对象中获得一个Tag对象,该对象包含了数据负载,并允许你列举标签的技术:Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);创建通用的NDEF记录类型本节介绍如何创建通用的NDEF记录类型,以便帮助你向NFC标签写入或用AndroidBeam发送数据。

华为手机的NFC功能介绍

华为手机的NFC功能介绍

华为手机的NFC功能介绍华为手机作为一款领先的智能手机品牌,不仅在硬件性能、摄影功能等方面有着卓越表现,还拥有许多实用的功能,其中之一就是NFC(Near Field Communication,近场通讯)功能。

本文将介绍华为手机的NFC功能,包括其定义、工作原理、应用场景以及使用方法。

一、NFC功能的定义NFC是一种无线通信技术,通过近距离无线电场感应来实现设备之间的数据传输。

它可以在两个设备之间进行快速、简便的数据交换,而无需复杂的设备配对和设置。

华为手机的NFC功能可以使手机与其他支持NFC的设备进行无线通信,包括其他智能手机、平板电脑、电子门锁、公交卡等。

二、NFC功能的工作原理NFC功能的工作原理基于磁感应和电磁感应技术。

当两个设备的NFC芯片靠近时,它们之间会建立起一个独立的无线通信通道,这个通道可以在短距离内传输数据。

NFC通信通道的建立速度非常快,通常只需几十毫秒的时间。

此外,NFC还支持主动和被动通信模式,可以根据实际需求进行选择。

三、NFC功能的应用场景1. 移动支付:NFC功能可以用于实现移动支付,用户只需将支持NFC的手机靠近POS机或其他支付终端,就可以完成支付过程,无需刷卡或输入密码。

华为手机支持各种移动支付应用,如华为钱包、支付宝、微信支付等。

2. 门禁卡功能:华为手机的NFC功能可以模拟门禁卡,用户只需将手机靠近门禁感应器,就可以实现刷卡开门,方便快捷。

3. 公交卡功能:华为手机还可以模拟公交卡,用户只需将手机靠近公交卡读卡器,就可以完成公交卡的刷卡乘车功能,不再需要携带实体公交卡。

4. 数据传输:NFC功能还可以用于实现设备之间的数据传输,例如将联系人、图片、音乐等文件通过NFC功能快速传输给其他支持NFC的设备。

四、NFC功能的使用方法使用华为手机的NFC功能非常简单。

首先,确保手机的NFC功能已打开,在设置中可以找到NFC选项进行开启。

接下来,根据具体需求选择相应的NFC应用,例如进行移动支付、刷卡开门等。

Android开发-蓝牙、NFC、网络和Wi-Fi

Android开发-蓝牙、NFC、网络和Wi-Fi

Android开发-蓝⽛、NFC、⽹络和Wi-Fi关键词:BluetoothAdapter、ConnectivityManager、WifiManager、NfcMessage、NfcAdapter、NdefMessage、NdefRecord管理蓝⽛设备和发现模式发现远程蓝⽛设备通过蓝⽛通信监视Internet连接监视Wi-Fi和⽹路详细信息配置Wi-Fi和扫描接⼊点使⽤Wi-Fi Direct传输数据扫描NFC标签使⽤Android Bean传输数据管理本地蓝⽛设备适配器通过类来控制本地蓝⽛设备,该类代表运⾏应⽤程序的Android设备。

BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();为了读取任何⼀种本地BluetoothAdapter属性、启动发现过程或者找到绑定的设备,需要在应⽤程序的manifest⽂件中包含BLUETOOTH权限。

为了修改任何⼀种本地设备属性,还需要BLUETOOTH_ADMIN使⽤权限。

BluetoothAdapter bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();//使⽤isEnable⽅法确认设备已经启⽤if(bluetoothAdapter.enable()){//访问BluetoothAdapter的"友好的"(⽤户设置的,⽤于标识特定设备的任意字符串)名称bluetoothAdapter.getName();//获取硬件地址bluetoothAdapter.getAddress();}如果拥有BLUETOOTH_ADMIN权限,那么就能够使⽤setName⽅法更改BluetoothAdapter的"友好的"名称。

使⽤⽅法,获取当前BluetoothAdapter的状态。

Indicates the local Bluetooth adapter is off.Indicates the local Bluetooth adapter is on, and ready for use.Indicates the local Bluetooth adapter is turning off.Indicates the local Bluetooth adapter is turning on.为了启⽤BluetoothAdapter,可以使⽤启动⼀个系统Referrence Activity并将静态常量作为其动作字符串。

NFC介绍及调试总结

NFC介绍及调试总结

NFC介绍及调试总结首先,NFC调试的第一步是明确设备是否支持NFC功能。

在Android设备上,可以通过检查设备的设置菜单或系统信息来确定是否支持NFC。

在iOS设备上,需要检查设备型号是否支持NFC功能。

如果设备支持NFC功能,下一步是检查NFC芯片的状态。

在Android设备上,可以通过NFC设置页面来查看NFC芯片的状态。

如果NFC芯片被禁用,需要启用NFC功能。

在iOS设备上,可以通过“设置”应用中的“NFC”选项来启用或禁用NFC功能。

一旦NFC功能启用,可以开始进行NFC调试。

首先,需要确保设备之间的距离不超过几公分。

通常,设备越靠近,NFC通信的效果越好。

其次,需要选择合适的NFC应用程序来进行通信。

在Android设备上,可以使用系统自带的NFC应用程序,如Google Pay或NFC Tools。

在iOS设备上,可以使用支持NFC功能的应用程序,如Apple Pay。

这些应用程序提供了进行NFC通信和交换信息的接口。

然后,需要确保设备之间建立了连接。

在Android设备上,可以将设备靠近,并确保设备上的NFC芯片和另一个设备上的NFC芯片之间有一段时间的接触。

在iOS设备上,需要将设备靠近,并确保设备上的NFC芯片和另一个设备上的NFC芯片之间建立了连接。

在进行NFC通信时,可能会遇到一些问题。

例如,设备之间无法建立连接,通信速度慢,或者数据传输错误。

这些问题可能是由于设备硬件故障、NFC芯片损坏或通信距离过远等原因引起的。

如果遇到这些问题,可以尝试解决一些常见的NFC问题。

首先,可以尝试重新启动设备,以解决可能的硬件或软件问题。

其次,可以尝试将设备放置在更近的距离,以改善通信效果。

此外,还可以尝试更新设备的软件版本,以获取最新的NFC功能和修复可能的错误。

总之,NFC是一种无线通信技术,可以用于各种场景。

在进行NFC调试时,需要确保设备支持NFC功能,并注意设备之间的距离和连接状态。

android实现通过NFC读取卡号

android实现通过NFC读取卡号

android实现通过NFC读取卡号本⽂实例为⼤家分享了android通过NFC读取卡号的具体代码,供⼤家参考,具体内容如下1.获取权限<uses-permission android:name="android.permission.NFC" /><uses-featureandroid:name="android.hardware.nfc"android:required="true" />2.设置NFC活动页<intent-filter><action android:name="android.nfc.action.TAG_DISCOVERED" /><data android:mimeType="text/plain" /></intent-filter>3.Activity代码//NFC对象private NfcAdapter mNfcAdapter;private PendingIntent pi;1.主⽅法中://获取默认的NFC控制器//初始化NfcAdaptermNfcAdapter = NfcAdapter.getDefaultAdapter(this);if (mNfcAdapter == null) {Toast.makeText(AddPointActivity.this, "设备不⽀持NFC!", Toast.LENGTH_LONG).show();finish();return;}if (!mNfcAdapter.isEnabled()) {Toast.makeText(AddPointActivity.this, "请在系统设置中先启⽤NFC功能!", Toast.LENGTH_LONG).show();finish();return;}//初始化PendingIntent// 初始化PendingIntent,当有NFC设备连接上的时候,就交给当前Activity处理pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);2.⽅法//获取数据@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);// 当前app正在前端界⾯运⾏,这个时候有intent发送过来,那么系统就会调⽤onNewIntent回调⽅法,将intent传送过来 // 我们只需要在这⾥检验这个intent是否是NFC相关的intent,如果是,就调⽤处理⽅法if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {processIntent(intent);}}//启动@Overrideprotected void onResume() {super.onResume();mNfcAdapter.enableForegroundDispatch(this, pi, null, null);}//解析private void processIntent(Intent intent) {//取出封装在intent中的TAGTag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);String CardId =ByteArrayToHexString(tagFromIntent.getId());Toast.makeText(AddPointActivity.this, CardId, Toast.LENGTH_LONG).show();}//转为16进制字符串private String ByteArrayToHexString(byte[] inarray) {int i, j, in;String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A","B", "C", "D", "E", "F" };String out = "";for (j = 0; j < inarray.length; ++j) {in = (int) inarray[j] & 0xff;i = (in >> 4) & 0x0f;out += hex[i];i = in & 0x0f;out += hex[i];}return out;}运⾏结果:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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消息推送给其他设备的方法。

相关文档
最新文档