失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android开发 NFC技术开发(一)

Android开发 NFC技术开发(一)

时间:2024-04-20 21:22:01

相关推荐

Android开发 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传输,NFC会直接利用蓝牙传输,这种技术被称为Android Beam,Android Beam传输数据的两部设备不再限于4厘米之内。

NfcManager一个NFC adapter的管理器,可以列出所有此android设备支持的NFC adapter.只不过大部分android 设备只有一个NFC adapter,所以你大部分情况下可以直接用静态方法getDefaultAdapter(context)来取适配器。

NfcAdapter表示本设备的NFC adapter,可以定义Intent来请求将系统检测到tags的提醒发送到你的Activity.并提供方法去注册前台tag提醒发布和前台NDEF推送。 前台NDEF推送是当前android版本唯一支持的p2p NFC通信方式。

PendingIntent通知Activity,一旦截获NFC消息,就会通过PendingIntent调用窗口

NdefMessageandNdefRecordNDEF是NFC论坛定义的数据结构,用来有效的存数据到NFC tags.比如文本,URL,和其他MIME类型。一个NdefMessage扮演一个容器,这个容器存哪些发送和读到的数据。一个NdefMessage对象包含0或多个NdefRecord,每个NDEF record有一个类型,比如文本,URL,智慧型海报/广告,或其他MIME数据。在NDEFMessage里的第一个NfcRecord的类型用来发送tag到一个android设备上的activity.

Tag标识一个被动的NFC目标,比如tag,card,钥匙挂扣,甚至是一个电话模拟的的NFC卡.当一个tag被检测到,一个tag对象将被创建并且封装到一个Intent里,然后NFC 发布系统将这个Intent用startActivity发送到注册了接受这种Intent的activity里。你可以用getTechList()方法来得到这个tag支持的技术细节和创建一个android.nfc.tech提供的相应的TagTechnology对象.

NFC协议标准,tag支持的不同TagTechnology对象:

2. NfcB,Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.3. NfcF,Provides access to NFC-F (JIS 6319-4) properties and I/O operations.4. NfcV,Provides access to NFC-V (ISO 15693) properties and I/O operations.5. IsoDep,Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.6. Ndef,提供对那些被格式化为NDEF的tag的数据的访问和其他操作。 Provides access to NDEF data and operations on NFC tags that have been formatted as NDEF. ```其中北京市政交通卡以前发行的卡显示类型为 MifareClassic + NfcA,08年以后的卡显示为 IsoDep,二代身份证的类型是 NfcB,Android 文件分享用的是Ndef格式传输数据也就是Android Beam传输的数据。如果你的数据类是NDEF格式数据,有两个类:1)NdefMessage:描述NDEF格式的信息,实际上我们写入NFC标签的就是NdefMessage对象。 2)NdefRecord:描述NDEF信息的一个信息段,一个NdefMessage可能包含一个或者多个NdefRecord。###下面是以IsoDep数据类型北京市政一卡通为例private NfcAdapter mNfcAdapter;private PendingIntent mPendingIntent;/*** 启动Activity,界面可见时*/@Overrideprotected void onStart() {super.onStart();mNfcAdapter = NfcAdapter.getDefaultAdapter(this);//一旦截获NFC消息,就会通过PendingIntent调用窗口mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);}/*** 获得焦点,按钮可以点击*/@Overridepublic void onResume() {super.onResume();//设置处理优于所有其他NFC的处理if (mNfcAdapter != null)mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);}/*** 暂停Activity,界面获取焦点,按钮可以点击*/@Overridepublic void onPause() {super.onPause();//恢复默认状态if (mNfcAdapter != null)mNfcAdapter.disableForegroundDispatch(this);}@Overridepublic void onNewIntent(Intent intent) {String idm = null;StringBuffer idmByte = new StringBuffer();byte[] rawIdm = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);Log.i("tag","-------"+Arrays.toString(rawIdm));if (rawIdm != null) {for (int i = 0; i < rawIdm.length; i++) {idmByte.append(Integer.toHexString(rawIdm[i] & 0xff));}idm = idmByte.toString();}mNfcText.setText("数据:" + idm);}

源码

欢迎关注微信公众号!你的每个赞和在看,都是对我的支持!👍

如果觉得《Android开发 NFC技术开发(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。