最近朋友几篇文章分析了改tag标签的文章. 关联文章的地址

文章译自:Advanced NFC

本文档分析了高级NFC,如与各种标签技术协作,NFC标签写入和前台调度,它答应应用程序在前台处置的intent,即使当其他应用程序过滤器雷同的。

标签技术支持任务

当NFC标签和Android任务时,使用读取和写入数据的的主要格式是NDEF标签。当设备扫描标签NDEF数据,Android供给了解析NdefMessage消息和其他可能的支持。当扫描标签不包含NDEF数据或NDEF数据不能被映射到一个MIME类型或UR时,在这些情况下,你需要打开tag并直接与其信息交换和使用自己的协议读写数据(在原始字节)。Android为使用的android.nfc.tech包情况供给了通用的支持,android.nfc.tech包如表1中所描述的 。您可以使用的getTechList()方法来确定标签的技术支持,并建立 与之一由android.nfc.tech类响应TagTechnology对象。

Table 1. Supported tag technologies

Class Description
TagTechnology 全部标签技术类必须实现的接口。
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 供给NFC标签已被格式化为NDEF的数据和操纵的拜访。
NdefFormatable 供给可能被格式化为NDEF的 formattable的标签。

上面的tag技术其实不强制android设备支持(即选择性的支持)。

Table 2. Optional supported tag technologies

Class Description
MifareClassic 如果此Android设备支持MIFARE,供给拜访的MIFARE Classic性能和I / O操纵。
MifareUltralight 如果此Android设备支持MIFARE,供给拜访的MIFARE 超轻性能和I / O操纵。

Tag技术与ACTION_TECH_DISCOVERED intent间协作

当设备扫描含有NDEF数据的tag,但不能被映射到一个MIME或URI,标签调度系统试图启动一个携带ACTION_TECH_DISCOVERED intent的activity。 扫描tag不是NDEF数据格式时,ACTION_TECH_DISCOVERED也可使用。有这种东西,如果标签调度系统无法解析tag时,可以直接与tag上数据停止交互。tag技术任务时的基本步调如下:
1、过滤指定要处置的标签技术的ACTION_TECH_DISCOVERED intent。在一般情况下,标签调度系统实验启动一个ACTION_TECH_DISCOVERED的intent,当NDEF消息,不能被映射为MIME类型或URI,或者如果标签扫描不包含NDEF数据。如何确定欲了解更多信息,请参阅标签调度系统。
2、当你的应用程序接收的intent,取得标签对象:

Tag

tagFromIntent

=

intent

.

getParcelableExtra

(

NfcAdapter

.

EXTRA_TAG

);

3、获得实例的TagTechnology,通过调用android.nfc.tech包 的get方法。调用get方法前,通过调用getTechList()可以罗列tag支持的技术。例如,从tag中要获得一个实例MifareUltralight,可以如下做:

MifareUltralight

.

get

(

intent

.

getParcelableExtra

(

NfcAdapter

.

EXTRA_TAG

));

Tags读写

NFC标签读写必须确保获得intent并打开tag间通信。为了读取和写入数据到标签,您必须定义自己的协议栈。请记住,当直接与tag交互时,你仍然可以读取写NDEF格式的数据。它依赖你怎么去构建。上面的例子表现了如何使用一个MIFARE超轻标签。

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

;

public

class

MifareUltralightTagTester

{

private

static

final

String

TAG

=

MifareUltralightTagTester

.

class

.

getSimpleName

();

public

void

writeTag

(

Tag

tag

,

String

tagText

)

{

MifareUltralight

ultralight

=

MifareUltralight

.

get

(

tag

);

try

{

ultralight

.

connect

();

ultralight

.

writePage

(

4

,

"abcd"

.

getBytes

(

Charset

.

forName

(

"US-ASCII"

)));

ultralight

.

writePage

(

5

,

"efgh"

.

getBytes

(

Charset

.

forName

(

"US-ASCII"

)));

ultralight

.

writePage

(

6

,

"ijkl"

.

getBytes

(

Charset

.

forName

(

"US-ASCII"

)));

ultralight

.

writePage

(

7

,

"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

);

}

}

}

public

String

readTag

(

Tag

tag

)

{

MifareUltralight

mifare

=

MifareUltralight

.

get

(

tag

);

try

{

mifare

.

connect

();

byte

[]

payload

=

mifare

.

readPages

(

4

);

return

new

String

(

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

);

}

}

}

return

null

;

}

}

前台调度系统的使用

前台调度系统答应activity截取intent并声明自己比其他处置雷同intent的activity的优先级要高。使用这个系统可认为android系统构建一些数据结构,数据结构能够为应用程序发送适当的意图。为了使前景调度系统:
1、在activity的onCreate()方法中添加如下code:
a、创建一个PendingIntent对象,android系统可以填充在tag被扫描到的内容。
PendingIntent pendingIntent =PendingIntent.getActivity(this,0,newIntent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);

b、声明intent过滤器来处置你想拦截的intent。前台调度系统检查过滤指定的intent,这个intent是扫描标签时收到的。如果匹配,那么你的应用程序处置的意图。如果它不匹配,前台调度系统回到intent调度系统的。指定一个空的数组intent过滤器和技术过滤器,指定要过滤全部的标签,回到TAG_DISCOVERED  intent。上面的代码片段处置全部MIME类型NDEF_DISCOVERED。您应该只处置那些你需要的。

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,};

c、设置您的应用程序要处置tag技术的数组。调用 Object.class.getName()方法来获得支持的所以技术。

techListsArray =newString[][]{newString[]{NfcF.class.getName()}};

2、重写以下activity生命周期回调函数,当activity失去(onPause())和恢复(onResume())焦点时,添加逻辑启用和禁用前台调度。enableForegroundDispatch()必须主线程调用,并只有当activity在前台(调用onResume()保障这一点)。您还需要实现onNewIntent回调函数来处置扫描NFC标签的数据。
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}
完全的例子可以查看API demo中的ForegroundDispatch部分。

文章结束给大家分享下程序员的一些笑话语录: 大家喝的是啤酒,这时你入座了。
你给自己倒了杯可乐,这叫低配置。
你给自已倒了杯啤酒,这叫标准配置。
你给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马。
你给自己倒了杯可乐,还滴了几滴醋,不仅颜色跟啤酒一样,而且不冒热气还有泡泡,这叫超级木马。
你的同事给你倒了杯白酒,这叫推荐配置。
菜过三巡,你就不跟他们客气了。
你向对面的人敬酒,这叫p2p。
你向对面的人敬酒,他回敬你,你又再敬他……,这叫tcp。
你向一桌人挨个敬酒,这叫令牌环。
你说只要是兄弟就干了这杯,这叫广播。
有一个人过来向这桌敬酒,你说不行你先过了我这关,这叫防火墙。
你的小弟们过来敬你酒,这叫一对多。
你是boss,所有人过来敬你酒,这叫服务器。
酒是一样的,可是喝酒的人是不同的。
你越喝脸越红,这叫频繁分配释放资源。
你越喝脸越白,这叫资源不释放。
你已经醉了,却说我还能喝,叫做资源额度不足。
你明明能喝,却说我已经醉了,叫做资源保留。
喝酒喝到最后的结果都一样
你突然跑向厕所,这叫捕获异常。
你在厕所吐了,反而觉得状态不错,这叫清空内存。
你在台面上吐了,觉得很惭愧,这叫程序异常。
你在boss面前吐了,觉得很害怕,这叫系统崩溃。
你吐到了boss身上,只能索性晕倒了,这叫硬件休克。

--------------------------------- 原创文章 By
tag和标签
---------------------------------

tag标签[置顶] 高级NFC相关推荐

  1. php ajax实现上移,jquery实现标签上移、下移、置顶_jquery

    eg:如在后台的标签列表中,实现上移.下移.置顶功能 主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代码实现还要加些判断,如当前点击操作项是否已经是置底或置底了 ...

  2. table标签中使th标签和td文字置顶

    在想要置顶的标签上添加 style="vertical-align:top" <table border="1"><tr><th& ...

  3. hexo博客优化之文章置顶+置顶标签

    本文首发于wangwlj.com 博文置顶 一种方法是手动对相关文件进行修改,具体可参考这篇文章. 另一种方法就是,目前已经有修改后支持置顶的仓库,可以直接用以下命令安装. $ npm uninsta ...

  4. 帝国cms linux伪静态规则,置帝国cms如何设置tag标签伪静态化 linux伪静态设置方法_博客...

    <置帝国cms如何设置tag标签伪静态化 linux伪静态设置方法_博客>由会员分享,可在线阅读,更多相关<置帝国cms如何设置tag标签伪静态化 linux伪静态设置方法_博客(6 ...

  5. Android近场通信---高级NFC(二)

    Android近场通信---高级NFC(二) 读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在 ...

  6. 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除

    文章目录 功能需求 一.置顶.加精.删除帖子功能的实现 1. dao层处理数据 接口定义 sal语句定义 2. service层业务处理 3. Controller层处理按钮事件异步请求 异步请求及k ...

  7. android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...

  8. android listview标题置顶,Android仿QQ左滑删除置顶ListView操作

    最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...

  9. iOS开发 处理置顶聊天的功能

    置顶聊天的功能 本文小白,仅供参考. 使用协议来处理. -(void)didTapReturnCell:(SLYPrivateChatView *)cell // 进入到视图的里面 [self.del ...

最新文章

  1. csla java_Csla框架之命令对象理解
  2. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理
  3. Vue中实现页面上点击按钮下载文件(exe)
  4. PHP 设计模式 笔记与总结(8)策略模式
  5. Java爬虫搜索原理实现
  6. 北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理
  7. SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级
  8. (转)基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts
  9. android的Handler、Message机制*
  10. python中怎样获得unicode_如何在Python中获取unicode月份名称?
  11. Java NIO入门
  12. 乐高创意机器人moc_乐高MOC佳作欣赏丨机械之美机器人乐高作品集15
  13. 简单使用MATLAB自带的遗传算法工具箱
  14. python实现QQ自动发送信息
  15. 熊出没全集光头强的机器人_熊出没:其实光头强早就不想当伐木工了,这些细节足以说明一切...
  16. 2016 工作、生活与得失
  17. Embedded Browser WindowsPC内嵌网页
  18. OS学习笔记-1(清华大学慕课)操作系统概述
  19. OnTheHub 免费取得Offfice/Windows 正版序号,学生/教师限定
  20. 18907 雪花雪花雪花

热门文章

  1. 硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...
  2. 华为云电脑.模式_华为云电脑支持全线,Huawei Share免费更新
  3. Java项目:医院管理系统(java+Springboot+Maven+Mybatis+Vue+Mysql)
  4. 投影转换_即插即用,办公投影不用愁:毕亚兹Mini DP转HDMIVGA转换器
  5. OpenCV 图像加载和显示
  6. 微信小程序云开发图片上传完整代码附效果图
  7. ES6 常用的特性整理
  8. 关于一些Linux SVN的安装使用
  9. Microsoft Visual Studio 2012 添加实体数据模型
  10. Git相关二三事(git reflog 和彩色branch)【转】