Android中NFC功能流程图解析及代码演示

合集下载

NFC手机读身份证demo及SDK

NFC手机读身份证demo及SDK

NFC读卡接口日期版本说明作者2018/12/09V1.0.0NFC&OTG证件读取,支持身份证/港澳居民居住证/护照/EID1.概述本SDK支持二代身份证、护照及EID的读取。

二代身份证接口添加了身份鉴权操作,只有当鉴权通过的用户才可以使用公司提供的解码服务器进行身份证解码。

护照及EID功能开通需要单独申请。

NFC读卡用于支持NFC的安卓设备上。

OTG读卡用于支持USB的安卓设备上(USB口需要配套专门证件读卡器)。

2.流程图3.回调在使用本SDK前必须实现ActiveCallBack接口中的相关函数,原型如下:public interface ActiveCallBack{void readProgress(int npaogress);void setUserInfo(String sztxt);}void readProgress(int npaogress);返回身份证读卡进度,一共20步。

●void setUserInfo(String sztxt);函数空实现即可,有时会返回调试信息。

4.接口●OTGReadCardAPI接口初始化操作。

paramContext:android的上下文cb:实现回调的类bNFC:统一写成false●GetVersion获取当前版本号●setServerInfo设置服务器列表(初始化后最先调用,必须)twoCardServerList:身份证解码服务器列表eidServerList:为nullbTestServer:统一填false返回值:无●NfcReadCard通过NFC读卡,同步操作,执行结束返回状态。

szAppID:APPID,每家商户的唯一ID(需要向本公司申请后获取)userInfo:用户信息,暂时为空intent:NFC句柄,OTG时填nulldefaultType:只能填eTwoGeneralCarduserData:用户透传数据,如不需要,直接填“”bAuth:填false返回值:41–失败90–成功●GetCardType返回NfcReadCard中读取的卡片类型。

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 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(近场通信)功能也越来越常见。

NFC是一种短距离高频无线通信技术,能够在手机和其他设备之间进行数据传输和交换。

下面将介绍如何使用NFC功能。

第一步:开启NFC功能要使用NFC功能,首先需要确保手机的NFC功能已经打开。

打开方法会因手机型号而有所不同,一般可以在设置菜单中找到“无线和网络”或者“连接”选项,然后点击“NFC”进行开启。

第二步:设置NFC功能在开启NFC功能后,可以对其进行一些设置。

比如,可以设置屏幕锁定后仍可使用NFC、允许自动启动应用程序等。

这些设置可以根据个人需求进行调整。

第三步:使用NFC标签NFC标签是一种装有芯片的小标签,可以储存信息。

要使用NFC标签,只需将手机靠近标签即可。

移动支付是NFC标签的一种常见用途。

在手机上安装并打开移动支付应用后,将手机靠近支持NFC支付的收款机即可完成支付。

除此之外,NFC标签还可以用来实现更多功能,比如设置手机的铃声、WIFI密码等。

只需将手机靠近储存有相应信息的NFC标签,即可自动完成相应设置。

第四步:进行数据交换NFC还可以用来进行设备间的数据传输和交换。

比如,两台支持NFC功能的手机之间可以通过简单地靠近对方来进行文件传输。

只需确保两台手机的NFC功能都已开启,然后在文件管理器或相册中选择想要发送的文件,点击“分享”或“发送”,将两台手机靠近即可完成传输。

此外,NFC还可以用来与支持NFC的无线扬声器、蓝牙耳机、读卡器等设备进行配对。

只需将两者靠近对方,即可完成配对。

第五步:NFC支付与交通卡NFC支付已经成为一种常见的移动支付方式,许多手机都支持NFC支付。

只需将手机靠近支持NFC支付的收款机即可完成支付。

此外,NFC还可以用来支付公共交通费用。

许多城市的公共交通系统已经支持NFC交通卡。

只需将手机靠近公交或地铁的读卡器,即可完成支付。

总结NFC功能是一种方便实用的技术,可以用来进行支付、传输文件、交换信息等。

8.NFC手机识别--类型2标签操作规范.

8.NFC手机识别--类型2标签操作规范.

命令集
READ命令用于读取类型2标签中的内容。其中,类型代码为 30h,表示是READ命令;字节2表示要读取的数据块编号,如 图6-21所示。
命令集
类型2标签收到READ命令后,将发送响应消息。如果读取成 功,返回16字节数据,即READD命令指定的数据块编号在内的 后续3个数据块的内容。举例来说,如果READ命令中的数据块 编号为4,标签将返回数据块4、 5、6、7这四个数据块共16字 节内容。如果发生错误,类型2标签返回NACK响应。
存储结构和管理
实际上,与类型1标签类似,在动态存储结构中,锁定字节 和预留字节位于数据块15之后到结束之间的任意位置,因此需 要一些信息来指示锁定字节和预留字节所在的位置。类型2标签 也定义了存储控制TLV(Memoery Control TLV)来描述预留字节的 位置.定义了锁定控制TLV (Lock ControlTLV)来描述锁定字节具体 的位置。类型2标签的TLV与类型1标签定义的一致,也包括NULL TLV、锁定控制TLV、存储控制TLV、 NDEF消息TLV、私有TLV和结 束TLV。
命令集
运行类必2标签平台的NFC读写器,可以通过读写命令来读 写类型2标签中的内容,类型2标签平台是NFC-A技术的一个子 集,除了ACK和NACK响应外,其他命令和晌应消息都采用NFC-A 的标准帧,ACK和NACK是一个包含4个数据比特的短帧。类型2 标签平台采用NFC-A的冲突检测流程。冲突检测完成后,读写 器发送READ或WRITE命令,将侦听设备激活。类型2标签支待的 命令有READ、WRITE和SECTOR SELECT,当读写器向类型2标签 发送这些命令后,类型2标签响应ACK或NACK消息。
存储结构和管理 类型2标签静态存储结构如图6-19所示。数据块0、数据块1 和数据块2的字节0、字节1为Internal字节,预留给标签厂商。 数据块2的字节2和字节3为锁定字节,其中的每一位对应一个数 据块,表示该数据块是否被锁定。类型2标签的cc与类型l标签的 cc一样。

nfc使用方法

nfc使用方法

nfc使用方法
NFC(近场通讯)是一种无线技术,可以使设备在极近的范围内进行通信。

NFC技术已经得到广泛应用,用于实现多种功能,例如传输数据、支付、身份验证等。

以下是使用NFC的
常见方法:
1. 数据传输:使用NFC可以快速传输文本、图片和音频等数据。

只需将两个支持NFC的设备靠近,然后在屏幕上确认传
输的内容即可完成数据传输。

2. 支付功能:许多智能手机和银行卡现在都支持NFC支付。

只需将手机或卡片靠近支持NFC支付功能的终端设备(如POS机),即可完成付款。

3. 身份验证:NFC标签可以用于身份验证和访问控制。

例如,将NFC标签贴在门禁读卡器上,只有持有授权的NFC设备才
能进入。

4. 信息分享:通过NFC,你可以与他人共享联系方式、社交
媒体账号和应用程序等信息。

只需将两个设备靠近,然后选择要分享的信息即可。

5. 设备配对:使用NFC可以方便地配对蓝牙设备,如耳机、
扬声器和键盘等。

只需将设备靠近,即可自动建立蓝牙连接。

6. 公交卡和门禁卡:很多城市都颁发了支持NFC的公交卡,
使用者只需将卡片靠近读卡器刷卡即可乘坐公交车。

同样的原
理也适用于门禁卡,只需将卡片靠近读卡器即可开启门锁。

总之,NFC技术简化了很多日常操作,使得数据传输、支付和身份验证更加便捷。

再加上越来越多的设备支持NFC,这项技术的应用前景也非常广阔。

手机nfc功能怎么用

手机nfc功能怎么用

手机nfc功能怎么用手机NFC功能如何使用手机NFC(Near Field Communication,近场通信)功能是一种短距离无线技术,可以在设备之间进行数据传输和交互。

通过手机NFC功能,用户可以实现各种便利的操作,如移动支付、快速配对和数据传输等。

下面将介绍手机NFC功能的使用方法。

首先,确保手机NFC功能已经开启。

在大部分手机系统中,用户可以在设置中找到“无线和网络”或“连接和共享”选项,进入该选项后找到“NFC”或“近场通信”,点击开启即可。

移动支付是手机NFC功能最为常见的应用之一。

用户只需下载相应的移动支付应用,绑定自己的银行卡或其他支付方式,通过将手机靠近具有NFC功能的POS终端或其他支持NFC 支付的设备,即可完成支付。

目前,使用手机NFC功能进行支付的方式有很多,如腾讯的“微信支付”、支付宝的“手机支付”等,用户可以根据自己的需求选择合适的应用。

除了移动支付之外,手机NFC功能还可以用于快速配对和数据传输。

在配对蓝牙设备时,通常需要在两个设备上进行配对操作并输入配对码,使用NFC功能可以简化这一过程。

只需将两个具有NFC功能的设备靠近,即可自动建立蓝牙连接,实现快速配对。

在数据传输方面,用户可以将两部手机靠近,通过NFC功能将照片、视频等文件传输到对方的手机上,无需借助传统的数据线或其他复杂的操作。

此外,手机NFC功能还可以用于一些便利的应用。

例如,用户可以将公交卡或门禁卡等信息存储在手机上,只需将手机靠近读卡器,即可实现刷卡进出。

此外,部分景区、商场等场所也提供手机NFC功能的门票,用户只需将手机靠近读卡器,即可实现快速入场。

总的来说,手机NFC功能为用户带来了许多便利。

通过移动支付、快速配对和数据传输等操作,用户可以更加方便快捷地完成日常生活中的各种任务。

当然,在使用手机NFC功能时,用户也要注意安全问题,避免盗刷等风险。

同时,随着技术的发展,手机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域来供电,即便是寄主设备(如手机)没电也可以工作。

androidnfc常用标签读取总结

androidnfc常用标签读取总结

androidnfc常⽤标签读取总结有⼏天没有更新博客了,不过本篇却准备了许久,希望能带给每⼀位开发者最简单⾼效的学习⽅式。

废话到此为⽌,下⾯开始正⽂。

NFC(Near Field Communication,近场通信)是⼀种数据传输技术。

与Wi-Fi、蓝⽛、红外线等数据传输技术的⼀个主要差异就是有效距离⼀般不能超过4厘⽶。

但是NFC传输速度要⽐红外快。

⽬前NFC已经出现了⼀些应⽤,例如电⼦标签识别、刷⼿机、点对点付款、⾝份识别、信息记录等,本篇⽂章的⽬的是为⼤家揭开NFC标签的⾯纱。

下⾯我们先从NFC的⼯作模式开始阐述NFC,开发NFC必先了解NFC。

1.NFC的⼯作模式NFC⽀持如下3种⼯作模式:读卡器模式(Reader/writer mode)、仿真卡模式(Card Emulation Mode)、点对点模式(P2P mode)。

下来分别看⼀下这三种模式:(1)读卡器模式数据在NFC芯⽚中,可以简单理解成“刷标签”。

本质上就是通过⽀持NFC的⼿机或其它电⼦设备从带有NFC芯⽚的标签、贴纸、名⽚等媒介中读写信息。

通常NFC标签是不需要外部供电的。

当⽀持NFC的外设向NFC读写数据时,它会发送某种磁场,⽽这个磁场会⾃动的向NFC标签供电。

(2)仿真卡模式数据在⽀持NFC的⼿机或其它电⼦设备中,可以简单理解成“刷⼿机”。

本质上就是将⽀持NFC的⼿机或其它电⼦设备当成借记卡、公交卡、门禁卡等IC卡使⽤。

基本原理是将相应IC卡中的信息凭证封装成数据包存储在⽀持NFC的外设中。

在使⽤时还需要⼀个NFC射频器(相当于刷卡器)。

将⼿机靠近NFC射频器,⼿机就会接收到NFC射频器发过来的信号,在通过⼀系列复杂的验证后,将IC卡的相应信息传⼊NFC射频器,最后这些IC卡数据会传⼊NFC射频器连接的电脑,并进⾏相应的处理(如电⼦转帐、开门等操作)。

(3)点对点模式该模式与蓝⽛、红外差不多,⽤于不同NFC设备之间进⾏数据交换,不过这个模式已经没有有“刷”的感觉了。

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读取二代证、港澳居住证方法

2. 接口概要
接口文件在 com\readTwoGeneralCard\OTGReadCardAPI.java 中。
3. 流程图
用户
sdk
初始化:new OTGReadCardAPI
设置服务器信息:setServerInfo 读身份证:NfcReadCard 返回成功或失败
获取解码成功的身份证信息:GetTwoCardInfo
二〇一八年十二月九日
8/5
为长期时存储“长期” public String szTwoIdNewAddress; // 最新住址 public byte[] arrTwoIdPhoto; // 照片信息 public byte[] arrTwoIdFingerprint; // 指纹信息
public String szSNID; public String szDNID;
解析用户信息失败 解析身份证服务器信息失败
解析身份证信息失败 解析身份证信息异常
二〇一八年十二月九日
5/5
-29993 -29992 -29991 -29990 -29989 -29988 -29987 -29986
解析护照服务器信息异常 解析护照信息失败 解析护照信息异常 保存卡片信息失败 返回包命令 ID 错误 返回错误 ID 失败 返回包解析数据出错 返回包格式出错
-19999 -19998 -19997 -19996 -19995 -19994 -19993 -19992 -19991 -19990 -19989 -19988
设备初始化失败 读卡器设备找不到
打开设备失败 设备没有打开 设置卡片类型失败
寻卡失败 选卡失败 防冲突失败 重置卡片失败 不支持的卡片类型 执行 Apdu 指令失败 设备已关闭

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⽂件,添加进你需要⽀持的标签类型。

nfc怎么用

nfc怎么用

nfc怎么用NFC(Near Field Communication,近场通信)是一种无线通信技术,可用于在非常短的距离内(通常是几厘米)在两个设备之间进行数据传输和交换。

NFC广泛应用于移动支付、数据传输、门禁控制、身份认证等领域。

下面是关于如何使用NFC的详细介绍:1. 设备要求:要使用NFC,首先需要确保您的设备支持NFC技术。

大多数现代智能手机、平板电脑和一些电子设备都具备NFC功能。

您可以在设备的设置中查找NFC选项,通常在“连接”或“无线和网络”部分。

2. 启用NFC:如果您的设备支持NFC,首先需要确保已启用NFC功能。

在手机上,通常可以在设置中找到“NFC和支付”或类似的选项,然后启用NFC。

3. NFC标签:NFC标签是一种被动设备,可以储存信息并与支持NFC的设备进行通信。

您可以将NFC标签附在物品上,如名片、海报、产品包装或门禁卡上。

当您的设备接触或靠近NFC标签时,将触发相应的操作。

4. NFC功能:NFC可用于多种功能,包括以下几个常见用途:-移动支付:使用NFC支付应用程序,您可以在支持NFC支付的商店进行付款。

只需将设备靠近POS终端即可完成支付。

-数据传输:您可以使用NFC轻松地传输文本、图像、链接等信息,只需将两个设备靠近即可。

-门禁和身份认证:NFC可以用于门禁系统和身份认证,例如在办公室或公共交通中。

-标签读取:您可以使用NFC设备读取NFC标签上存储的信息,如产品信息、网址、联系信息等。

5. 数据传输:要传输数据,确保两个支持NFC的设备都启用了NFC功能。

然后,在两者之间靠近NFC芯片或标签,设备会自动检测到并触发交互。

您可以按照设备上的提示进行操作,如点击屏幕以接受传入数据。

6. 安全性:在使用NFC进行付款或传输敏感信息时,请确保设备和应用程序都采取了适当的安全措施,如密码保护或指纹识别。

7. 应用程序支持:某些NFC功能可能需要特定的应用程序支持,例如移动支付。

uni-app实现NFC读取功能

uni-app实现NFC读取功能

uni-app实现NFC读取功能本⽂实例为⼤家分享了uni-app实现NFC读取功能的具体代码,供⼤家参考,具体内容如下好久没有写博客了,今天难得有空重新记录⾃⼰学习的点点滴滴。

1、NFC⽅法.js// 包路径const package_NdefRecord = 'android.nfc.NdefRecord';const package_NdefMessage = 'android.nfc.NdefMessage';const package_TECH_DISCOVERED = 'android.nfc.action.TECH_DISCOVERED';const package_Intent = 'android.content.Intent';const package_Activity = 'android.app.Activity';const package_PendingIntent = 'android.app.PendingIntent';const package_IntentFilter = 'android.content.IntentFilter';const package_NfcAdapter = 'android.nfc.NfcAdapter';const package_Ndef = 'android.nfc.tech.Ndef';const package_NdefFormatable = 'android.nfc.tech.NdefFormatable';const package_Parcelable = 'android.os.Parcelable';const package_String = 'ng.String';let NfcAdapter;let NdefRecord;let NdefMessage;let readyRead = true; //开启读let noNFC = false;let techListsArray = [['android.nfc.tech.IsoDep'],['android.nfc.tech.NfcA'],['android.nfc.tech.NfcB'],['android.nfc.tech.NfcF'],['android.nfc.tech.Nfcf'],['android.nfc.tech.NfcV'],['android.nfc.tech.NdefFormatable'],['android.nfc.tech.MifareClassi'],['android.nfc.tech.MifareUltralight']];// 要写⼊的数据let text = '{id:8888,name:nfc,stie:}';let readResult = '';export default {listenNFCStatus: function() {console.log("---------listenNFCStatus--------------")let that = this;try {let main = plus.android.runtimeMainActivity();let Intent = plus.android.importClass('android.content.Intent');let Activity = plus.android.importClass('android.app.Activity');let PendingIntent = plus.android.importClass('android.app.PendingIntent');let IntentFilter = plus.android.importClass('android.content.IntentFilter');NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');let nfcAdapter = NfcAdapter.getDefaultAdapter(main);if (nfcAdapter == null) {uni.showToast({title: '设备不⽀持NFC!',icon: 'none'})noNFC = true;return;}if (!nfcAdapter.isEnabled()) {uni.showToast({title: '请在系统设置中先启⽤NFC功能!',icon: 'none'});noNFC = true;return;} else {noNFC = false;}let intent = new Intent(main, main.getClass());intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);let pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);let ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");ndef.addDataType("*/*");let intentFiltersArray = [ndef];//重点部分代码const promise = new Promise((resolve, reject) => {plus.globalEvent.addEventListener('newintent', function() {// 轮询调⽤ NFC// setTimeout(that.nfcRuning(resolve), 1000);setTimeout(() => {that.nfcRuning(resolve)}, 1000);});})nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); return promise} catch (e) {}},nfcRuning: function(resolve) {// console.log("--------------nfcRuning---------------")NdefRecord = plus.android.importClass("android.nfc.NdefRecord");NdefMessage = plus.android.importClass("android.nfc.NdefMessage");let main = plus.android.runtimeMainActivity();let intent = main.getIntent();let that = this;if (package_TECH_DISCOVERED == intent.getAction()) {if (readyRead) {//这⾥通过read⽅法拿到NFC数据const id = that.read(intent);// readyRead = false;//将数据返回出去resolve(id)}}},read(intent) {// toast('请勿移开标签正在读取数据');let that = this;// NFC idlet bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);let nfc_id = that.byteArrayToHexString(bytesId);return nfc_id;},byteArrayToHexString: function(inarray) { // converts byte arrays to stringlet i, j, inn;let hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];let out = "";for (j = 0; j < inarray.length; ++j) {inn = inarray[j] & 0xff;i = (inn >>> 4) & 0x0f;out += hex[i];i = inn & 0x0f;out += hex[i];}return out;},}function toast(content) {uni.showToast({title: content,icon: 'none'})}2、在⽤NFC的页⾯调⽤⽅法<view class="flex nfc-ewm"><view class="nfc-ewm-item" style="border-right: 1px solid #ccc;" @click="testNFC"><image src="@/assets/images/application/icon-nfc.png" alt=""></image>NFC感应</view><view class="nfc-ewm-item" @click="openScanCode"><image src="@/assets/images/application/icon-ewm.png" alt=""></image>⼆维码扫描</view></view>import testtest from "../../../../../components/hexiii-nfc/hexiii-nfc.js"methods:{async testNFC() {//这⾥⽤异步获取读取到的NFC数据const nfcId = await testtest.listenNFCStatus();//console.log(nfcId )//以下数据是我的业务逻辑代码,如果只要读取NFC数据上⾯那⼀⾏代码即可了。

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功能,并注意设备之间的距离和连接状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android中NFC功能流程图解析及代码演示在Android4.0推出的时候,一个非常引人注目的功能就是NFC(Near Field Communication). Near Field Communication (NFC) is a set of short-range wireless technologies, typically requiring a distance of 4cm or less to initiate a connection. NFC allows you to share small payloads of data between an NFC tag and an Android-powered device, or between two Android-powered devices.翻译:近场通讯(NFC)是一系列短距离无线技术,一般需要4cm或者更短去初始化连接。

近场通讯(NFC)允许你在NFC tag和Android设备或者两个Android设备间共享小负载数据。

典型的应用为刷卡应用,如刷信用卡,公交车卡,吃饭的饭卡之类。

腾讯2011年1月份文章“Android首款NFC近场通信应用推出”,说明了基于Android的NFC应用目前已经有了,得益于日本在手机刷卡的应用氛围。

据2011年7月网易文章“PayPal推出Android系统NFC移动支付服务”报道,PayPal已经做了尝试了,相信这股风很快要刮到中国。

下面我们从技术的层面来分析一下这个技术。

官方的图片示例为:这是NFC的开发流程,参考文章“【NFC在android中的应用API】”。

相关的类代码有:NfcAdapter,NdefMessage, NdefRecord,ACTION_TAG_DISCOVERED.在功能层面上,涉及到了NFC的读写功能。

下面我们分别来做总结。

在代码层上面:使用的时候,需要在AndroidManifest.xml里面加一些权限以及属性。

<uses-permissionandroid:name="android.permission.NFC"/><uses-feature android:name="android.hardware.nfc"android:required="true"/><uses-sdk android:minSdkVersion="10"/>这里注意,在Android Version 9的时候仅仅支持了ACTION_TAG_DISCOVERED,对于其他的需要10以上。

在上面的基础上,还需要增加intent-filter的支持。

<intent-filter><actionandroid:name="android.nfc.action.NDEF_DISCOVERED"/><categoryandroid:name="android.intent.category.DEFAULT"/><data android:mimeType="text/plain"/></intent-filter>获取NfcAdapter的代码为public static String getStatusNfcDevice () {NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter();if (nfcAdapter.isEnabled()) {String status = "enabled";return status;}else {String status = "disabled";return status;}}处理函数为public void onResume() {super.onResume();if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {Parcelable[] rawMsgs =intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_M ESSAGES);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}完整的一个操作代码摘自Google Android NFC Guide代码(略加注释):package com.example.android.beam;import android.app.Activity;import android.content.Intent;import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.NfcAdapter;importandroid.nfc.NfcAdapter.CreateNdefMessageCallback; import android.nfc.NfcEvent;import android.os.Bundle;import android.os.Parcelable;import android.widget.TextView;importimport java.nio.charset.Charset;//继承并实现接口CreateNdefMessageCallback方法createNdefMessagepublic class Beam extends Activity implements CreateNdefMessageCallback {NfcAdapter mNfcAdapter;TextView textView;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);TextView textView = (TextView)findViewById(R.id.textView);// Check for available NFC Adapter//检测是否有NFC适配器mNfcAdapter = NfcAdapter.getDefaultAdapter(this); if (mNfcAdapter == null) {Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();finish();return;}// Register callback//注册回调函数mNfcAdapter.setNdefPushMessageCallback(this, this);}@Overridepublic NdefMessage createNdefMessage(NfcEvent event) { String text = ("Beam me up, Android!\n\n" +"Beam Time: " + System.currentTimeMillis());//回调函数,构造NdefMessage格式NdefMessage msg = new NdefMessage(new NdefRecord[] { createMimeRecord("application/com.example.android.beam",text.getBytes())//,NdefRecord.createApplicationRecord("com.example.and roid.beam")});return msg;}@Overridepublic void onResume() {super.onResume();// Check to see that the Activity started due to an Android Beam//得到是否检测到ACTION_NDEF_DISCOVERED触发if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent(). getAction())) {processIntent(getIntent());}}//重载Activity类方法处理当新Intent到来事件@Overridepublic void onNewIntent(Intent intent) {// onResume gets called after this to handle the intent setIntent(intent);}//关键处理函数,处理扫描到的NdefMessagevoid processIntent(Intent intent) {textView = (TextView) findViewById(R.id.textView);Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES);// only one message sent during the beamNdefMessage msg = (NdefMessage) rawMsgs[0];// record 0 contains the MIME type, record 1 is the AAR, if presenttextView.setText(newString(msg.getRecords()[0].getPayload()));}public NdefRecord createMimeRecord(String mimeType, byte[] payload) {byte[] mimeBytes =mimeType.getBytes(Charset.forName("US-ASCII"));NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0],payload);return mimeRecord;}}上面代码还需要在AndroidManifest.xml文件里面添加<intent-filter><actionandroid:name="android.nfc.action.NDEF_DISCOVERED"/><categoryandroid:name="android.intent.category.DEFAULT"/><dataandroid:mimeType="application/com.example.android.beam "/></intent-filter>在对NFC设备进行写操作的时候,相关代码:private void enableTagWriteMode() {mWriteMode = true;IntentFilter tagDetected = newIntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);mWriteTagFilters = new IntentFilter[] { tagDetected };mNfcAdapter.enableForegroundDispatch(this,mNfcPendingIntent, mWriteTagFilters, null);}@Overrideprotected void onNewIntent(Intent intent) {// Tag writing modeif (mWriteMode &&NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getActi on())) {Tag detectedTag =intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);if(NfcUtils.writeTag(NfcUtils.getPlaceidAsNdef(placeidTo Write), detectedTag)) {Toast.makeText(this, "Success: Wrote placeid to nfc tag", Toast.LENGTH_LONG).show();NfcUtils.soundNotify(this);} else {Toast.makeText(this, "Write failed",Toast.LENGTH_LONG).show();}}}public static boolean writeTag(NdefMessage message, Tag tag) {int size = message.toByteArray().length;try {Ndef ndef = Ndef.get(tag);if (ndef != null) {ndef.connect();if (!ndef.isWritable()) {return false;}if (ndef.getMaxSize() < size) {return false;}ndef.writeNdefMessage(message);return true;} else {NdefFormatable format = NdefFormatable.get(tag);if (format != null) {try {format.connect();format.format(message);return true;} catch (IOException e) {return false;}} else {return false;}}} catch (Exception e) {return false;}}相关的AndroidManifest.xml文件配置如下:<activity android:name=".CheckInActivity"><intent-filter><actionandroid:name="android.nfc.action.NDEF_DISCOVERED"/><dataandroid:mimeType="application/vnd.facebook.places"/><categoryandroid:name="android.intent.category.DEFAULT"/></intent-filter></activity>参考文章:参考文章:/guide/topics/nfc/nfc.html/questions/5078649/android-nfc-sample-demo-reads-only-fake-inform ation-from-the-tag/guide/topics/nfc/index.html/11/0714/09/78TPVJOL00253CVK.html/jfttcjl/archive/2011/11/09/2242045.html/blog/how-to-nfc-on-the-android-platform/另外有几个专门推动NFC技术的联盟:/wp/nfchal//theme/nfc//home/官方关于NFC的翻译文档见:/nicebooks/article/details/6223956参考库:/p/guava-libraries/。

相关文档
最新文档