NFC高级
高级 NFC
Tag技术支持工作
表 1. 支持的Tag技术
| 类 | 描述 |
|---|---|
TagTechnology |
这个接口是下面所有tag technology类必须实现的。 |
NfcA |
提供访问 NFC-A (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的tag的数据的访问和其他操作 |
NdefFormatable |
对那些可以被格式化成NDEF格式的tag提供一个格式化的操作 |
表 2. 可选的支持的Tag技术
| 类 | 描述 |
|---|---|
MifareClassic |
如果android设备支持MIFARE,提供对MIFARE Classic目标的属性和I/O操作。 |
MifareUltralight |
如果android设备支持MIFARE,提供对MIFARE Ultralight目标的属性和I/O操作。 |
Tag技术工作和 ACTION_TECH_DISCOVERED Intent
- 过滤一个你想要处理的Tag技术的 ACTION_TECH_DISCOVERED intent. 获取更多信息请参阅 过滤 NFC intents. 一般来说。 当一个NDEF消息不能被映射到MIME类型或者URI上时,Tag发布系统尝试启动一个ACTION_TECH_DISCOVERED intent, 否则如果被扫描到的Tag不包含NDEF数据. 欲了解如何确定的更多信息,请参阅Tag发布系统.
- 当你的应用程序接收到该Intent, 从以图中获取Tag对象:
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- 通过调用在android.nfc.tech包的类中的一个get factory方法,获取到TagTechnology的一个实例 . 你可以在调用一个get factory方法以前,计算支持Tag技术通过调用getTechList(). 举例来说, 为了从一个Tag得到MifareUltralight的一个实例, 请执行下列操作:
MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
读取和写入Tags
package com.example.android.nfc;import android.nfc.Tag;import android.nfc.tech.MifareUltralight;import android.util.Log;import java.io.IOException;import java.nio.charset.Charset;publicclassMifareUltralightTagTester{privatestaticfinalString TAG =MifareUltralightTagTester.class.getSimpleName();publicvoid writeTag(Tag tag,String tagText){MifareUltralight ultralight =MifareUltralight.get(tag);try{
ultralight.connect();
ultralight.writePage(,"abcd".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(,"efgh".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(,"ijkl".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(,"mnop".getBytes(Charset.forName("US-ASCII")));}catch(IOException e){Log.e(TAG,"IOException while closing MifareUltralight...", e);}finally{try{
ultralight.close();}catch(IOException e){Log.e(TAG,"IOException while closing MifareUltralight...", e);}}}publicString readTag(Tag tag){MifareUltralight mifare =MifareUltralight.get(tag);try{
mifare.connect();byte[] payload = mifare.readPages();returnnewString(payload,Charset.forName("US-ASCII"));}catch(IOException e){Log.e(TAG,"IOException while writing MifareUltralight
message...", e);}finally{if(mifare !=null){try{
mifare.close();}catch(IOException e){Log.e(TAG,"Error closing tag...", e);}}}returnnull;}}
使用前端发布系统
- 在你的activity的
onCreate()方法中添加如下代码:- 创建一个
PendingIntent对象, 以便系统可以在它被扫描到时,用tag的细节填充它PendingIntent pendingIntent =PendingIntent.getActivity(this,,newIntent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),);
- 在Intent filters里声明你想要处理的Intent,一个tag被检测到时先检查前台发布系统,如果前台Activity符合Intent filter的要求,那么前台的Activity的将处理此Intent。如果不符合,前台发布系统将Intent转到Intent发布系统。如果指定了null的Intent filters,当任意tag被检测到时,你将收到TAG_DISCOVERED intent。下面的代码片断处理所有NDEF_DISCOVERED的MIME类型. 因此请注意你应该只处理你想要的Intent。
IntentFilter ndef =newIntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);try{
ndef.addDataType("*/*");/* Handles all MIME based dispatches.
You should specify only the ones that you need. */}catch(MalformedMimeTypeException e){thrownewRuntimeException("fail", e);}
intentFiltersArray =newIntentFilter[]{ndef,}; - 设置一个你程序要处理的Tag technologies的列表,调用Object.class.getName() 方法来获得你想要支持处理的technology类。
techListsArray =newString[][]{newString[]{NfcF.class.getName()}};
- 创建一个
- 覆盖下面的方法来打开或关闭前台发布系统。比如onPause()和onResume()方法。必须在主线程里调用enableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][]) 而且Activity在前台(可以在onResume()里调用来保证这点)。你也要覆盖onNewIntent回调来处理得到的NFC tag数据。
publicvoid onPause(){super.onPause();
mAdapter.disableForegroundDispatch(this);}publicvoid onResume(){super.onResume();
mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);}publicvoid onNewIntent(Intent intent){Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);//do something with tagFromIntent}
NFC高级的更多相关文章
- Android训练课程(Android Training) - NFC基础
NFC 基础 本文档介绍了在Android上的基本的NFC任务.它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Androi ...
- Android近场通信---高级NFC(二)
读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在直接使用NFC标签工作时,你依然能够读写NDE ...
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- 【NFC】Android NFC API Reference中英文
0 Near Field Communication Near Field Communication (NFC) is a set of short-range wireless technol ...
- NFC基础
本文档描述了在Android执行的基本的NFC技术,它说明了如何发送和接收NDEF消息的形式的NFC数据,并介绍Android框架中支持这些功能的API,对于更高级的主题,包括讨论非NDEF数据相关的 ...
- NFC会员管理-转载自http://technews.cn/2014/09/13/nfc-sticker/
基隆的百年名店“李鹄饼店”误用馊水油,客人纷纷上门退货,因退货条件宽松,客人一货两退,造成巨大的损失.为了平息客人的愤怒,店家允许客人凭发 票或商品办理退货,有的客人先用发票退一次钱,再用商品退一次钱 ...
- Android NFC开发(一)——初探NFC,了解当前前沿技术
Android NFC开发(一)--初探NFC,了解当前前沿技术 官方文档:http://developer.android.com/guide/topics/connectivity/nfc/ind ...
- Visual Studio 2015速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- 《Android传感器高级编程》
<Android传感器高级编程> 基本信息 原书名:Professional Android Sensor Programming 原出版社: Wrox 作者: (美)米内特(Greg M ...
随机推荐
- hdu 4035 Maze(期待更多经典的树DP)
Maze Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Submi ...
- a^b%c 的三种形式
求a^b%c,(1 <= a,b <= 2^62, 1 <= c <= 10^9) 最主要的高速幂 _LL mod_exp(_LL a, _LL b, int c) { _L ...
- GitHub版本控制
版本控制-GitHub 前面几篇文章,我们介绍了Git的基本用法及Git服务器的搭建,本篇文章来学习一下如何使用GitHub.GitHub是开源的代码库以及版本控制库,是目前使用网络上使用最为广泛的服 ...
- 使用C#或javascript将Table里的数据导出到Excel
原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...
- CodeForces 425E Sereja and Sets
意甲冠军: 集S它包括了很多间隔[l,r] 和1<=l<=r<=n f(S)个不相交的区间 问给出n和f(S) 有几种可能的S集合 思路: dp好题 至于为啥是dp- 我 ...
- android 应用程序框架
携带Android软件开发时间,由开发商开发Android应用程序是通过应用程序框架和Android底层交互,因此,发展以达到最大的部分是应用程序框架. 应用集成框架 那里4一个重要组成部分,以下. ...
- NOIP 2012 解决问题的方法
[D1T1vigenerepassword] P1778vigenerepassword Accepted 标签:[显示标签] 描写叙述 16世纪法国外交家Blaise de Vigenère设计了一 ...
- 分享一个解析XML成为php数组的方法
原文:分享一个解析XML成为php数组的方法 <?php /* * To change this template, choose Tools | Templates * and open th ...
- JQuery日记6.5 Javascript异步模式(一)
理解力JQuery前实现异步队列,有必要理解javascript异步模式. Javascript异步其实并不严重格异步感,js使某些片段异步方式在将来运行,流不必等待继续向下进行. 在多线程的语言中最 ...
- Asp.net MVC + EF + Spring.Net 项目实践(一)
准备用几篇文章来做一个MVC的例子,为了给新同事做参考,也为自己做个知识储备. 首先,用VS2013创建一个空白解决方案StudentManageSystem,然后添加一个MVC应用程序(可参考ASP ...