当前位置: 首页 > 编程日记 > 正文

tag标签[置顶] 高级NFC

最近朋友几篇文章分析了改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

ClassDescription
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

ClassDescription
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和标签
---------------------------------

相关文章:

python中类的约束和限制对象添加属性

通过__slots__限制对象可添加的属性 class A:__slots__ [a, b]passa1 A() a1.a 10 print(a1.a) a1.c 0 # 只能添加a,b属性添加其他属性就报错 没有约束 class Alipay:def pay(self, money):print(此次消费%s % money)class QQpay:def pay(self, money):print…

CEPH核心理论 相关导图(持续更新)

围绕分布式存储(ceph)绘制的技能图谱可参考分布式存储ceph 技能图谱 相关的原始编辑文件可以从github-mindMapping下载 如有缺失、不足之处欢迎指正 CEPH架构 关于系统架构,这里主要是将CEPH融入操作系统架构之中 且是根据L版本进行绘制的 关于文件系统 &#xff1…

Newtonsoft.Json文件错误

今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原 newtonsoft.Json文件覆盖了,所以程序运行时出现如下错误: “ 未能加载文件或程…

提花原理与计算机,电脑提花袜的设计原理与方法:提花女袜

全电脑单针筒袜机生产提花袜,运用计算机辅助设计系统进行袜子的花型图案及编织程序设计。文章介绍了提花袜的组织结构设计与提花编织原理及花型设计与编辑的方法。   Jacquard hosiery has been produced on the computerized hosiery machine with single cylind…

linux网络虚拟化

地址:http://blog.kghost.info/2013/03/01/linux-network-emulator/安装ip netns命令:#yum instal -y *netns*另附一个地址:http://crpppc19.epfl.ch/cgi-bin/man/man2html?ip-netns8转载于:https://blog.51cto.com/kernal/1540612

Linux内存管理:bufferCache和PageCache

参考文档: https://zhuanlan.zhihu.com/p/42364591 https://zhuanlan.zhihu.com/p/32354613 《深入理解Linux 内核》

mfc 开启指定服务器,用MFC实现消息的发送和接收(含服务器)

《用MFC实现消息的发送和接收(含服务器)》由会员分享,可在线阅读,更多相关《用MFC实现消息的发送和接收(含服务器)(33页珍藏版)》请在人人文库网上搜索。1、精品好资料学习推荐新建WClient工程基于对话框OK,直接Finish界面制作我们需要三个按…

Web Api学习一

接触WebApi读的第一篇文章: ASP.NET Web API(一):使用初探,GET和POST数据 实践过程中,用的Fiddler模拟Post请求时收到的对象总是为空null 解决:将文章中的内容改为了如下: User-Agen…

HTML5十五大新特性

HTML5想必大家都很熟悉了。然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性。一起来看下:1.新的文档类型 (New Doctype)目前许多网页还在使用XHTML 1.0 并且要在第一行像这样声明文档类型&#xf…

[THUWC2017]随机二分图

题目大意 给一张二分图,有左部点和右部点。 有三种边,第一种是直接从左部点连向右部点,出现概率为50%。 第二种边一组里有两条边,这两条边同时出现或者不出现,概率都是50%。 第三种边一组里有两条边,这两条…

Eclipse问题集锦

1、SDK版本过低的问题。 现象: 更新SDK后,每次进入Eclipse,都会提示说需要23.0.0版本的SDK,当前的22.6.0版本的SDK版本过低;然而,确认更新后,结果却是说没有任何更新的东东。 解决办法&#xff…

渥太华大学计算机硕士课程,渥太华大学计算机工程专业解析

本课程以扎实的传统工程技术为基础,涵盖计算机软硬件设计的多个不同方面,并可对基于微处理器的系统、计算机体系结构、编程概念、实时操作系统、软件工程和机器人技术进行更专业的研究。这个项目提供了多种职业发展途径。强制一年级的课程:化学原理gng11…

博弈最高位POJ 1704(Georgia and Bob-Nim博弈)

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 Georgia and BobTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 6341 Accepted: 1826Description Georgia and Bob decide to play a self-invented game. Th…

用Python深入理解跳跃表原理及实现

最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的。第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料。其中,网上有部分文章是按照如下方式描述跳跃表的: 这种描述便于理解&am…

Linux进程管理:进程状态和CPU平均负载

常见的linux进程状态如下: 关于源文件xmid,可以从Mind-Mapping获取 这里借助进程状态来描述一下linux系统中的平均负载的概念 当我们感觉到系统变慢时,通常通过top和uptime命令来了解系统的负载情况 [rootpub-ncpu-ndb0 ~]# uptime21:06:13…

poj2420A Star not a Tree?(模拟退火)

链接 求某一点到其它点距离和最小&#xff0c;求这个和&#xff0c;这个点 为费马点。 做法&#xff1a;模拟退火 1 #include <iostream>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 #include<stdlib.h>6 #include<vector&…

刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法

以下是目前在内测阶段玩家比较常见的一些问题&#xff0c;希望对大家有所帮助&#xff01;1.如果没有正确安装DX9.0B,可能会造成"执行文件BO.EXE时出错&#xff0c;错误代码:2"或者"错误代码:1157"等错误.一个验证方法就是直接运行Bo.exe文件如果提示"…

实战:一次失败的WEB攻击试验,欢迎高手补充

2019独角兽企业重金招聘Python工程师标准>>> 首先声明&#xff1a;这个文章我描述的是一次比较失败的WEB攻击试验&#xff0c;理论基础是一次在网上看到的一篇关于"慢攻击"的概念&#xff0c;那什么叫慢攻击呢&#xff1f; 在解释这个"慢攻击"概…

十大排序算法 导图总结

以下为我们经常用到的十大典型排序算法导图&#xff0c;很多设计以及优化的思想值得去参考学习 因为代码较多&#xff0c;所以都添加到对应的实现注释中了&#xff0c;相关代码可以从Mind-mapping获取xmind源文件 参考文档: 基数排序 堆排序 希尔排序 https://blog.csdn.net/r…

机器学习问题的十个实例【转】

机器学习是什么&#xff1f;这个问题的答案可以参考权威的机器学习定义&#xff0c;但是实际上&#xff0c;机器学习是由它所解决的问题定义的。因此&#xff0c;理解机器学习最好的方式是观察一些实例。 首先来看一些现实生活中众所周知和理解的机器学习问题的实例&#xff0c…

node项目部署到服务器报错,记一次部署node项目到centos服务器经历

&#xff1a;-}先从网上随便搜了个 contos 安装 node 的教程&#xff0c;大概就是这样。准备命令&#xff1a;yum -y install gcc make gcc-c openssl-devel wget下载源码及解压&#xff1a;编译及安装&#xff1a;cd node-v0.10.26make && make install验证是否安装配…

用shell脚本监控系统

简单的用shell脚本写一个“监控”程序作为思路&#xff0c;大致为&#xff1a;实时检测系统的内存使用率&#xff0c;如果大于阈值那么报警&#xff08;如果有条件可以使用短信接口或者实在不行可以使用邮件通知&#xff09;&#xff0c;并记录到日志文件里&#xff0c;如果小于…

P2480 [SDOI2010]古代猪文 Lucas+CRT合并

\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长&#xff0c;博大精深。 iPig在大肥猪学校图书馆中查阅资料&#xff0c;得知远古时期猪文文字总个数为N。当然&#xff0c;一种语言如果字数很多&#xff0c;字典也相应会很大。当时的猪王国国王考虑到如果修一本字典&…

Linux进程管理: 多进程编程

多进程编程 mind-Mapping保存有xmind原始文件&#xff0c;可直接获取 无名管道PIPE 命名管道FIFO POSIX共享内存 POSIX消息队列 POSIX信号量 SYS V共享内存 SYS V消息队列 SYS V信号量

关于HtmlAgilityPack解析页面中数据乱码问题

第一种方式&#xff1a;publicstaticHtmlDocument LoadHtmlByUrls(stringurl){HtmlDocument htmldoc;HtmlWeb htmlWeb new HtmlWeb(); //不够完善 此内置方法导致中文乱码//htmlWeb.OverrideEncoding Encoding.UTF8;htmldoc htmlWeb.Load(url);Encoding coding htmldoc.S…

服务器无线网卡驱动程序,在Ubuntu里使用Windows的无线网卡驱动程序的方法教程...

Ubuntu的“帮助和支持”说“Ubuntu支持一种称为NDISWrapper的系统。它可以让你在Ubuntu下使用Windows无线设备驱动程序”。1、准备好无线网卡的Windows驱动程序&#xff0c;我是用for Windows XP的。2、先用有线网络联网&#xff0c;在新立得软件包管理器里安装ndisgtk。或到ht…

绿色版mysql使用方法

一、下载MySQLhttp://www.mysql.org/downloads我下载的是mysql-noinstall-5.0.67-win32.zip 二、安装过程1、解压缩 mysql-noinstall-5.0.67-win32.zip 到一个C盘&#xff0c;重新命名为 MySQL5 。假定MYSQL_HOMEC: MySQL52、编辑mysql的运行配置文件my.ini&#xff0c;如果没有…

C# 栈 、队列的概念

栈&#xff1a; 也是System.Collections下的数据结构 存储依然是Object类型的对象 Stack 名字 new Stack(); Count&#xff1a;实际拥有的元素个数 栈的释放顺序是先进后出&#xff08;后进先出&#xff09; 压栈——Push(object 对象)把这个对象添加到栈的顶部 弹栈——Pop()…

Linux多线程管理: 多线程编程

多线程编程 mind-Mapping保存有一下导图的xmind文件&#xff0c;可直接获取 互斥变量 互斥对象 ptrhead相关接口 条件变量 future异步访问类 async类 promise类 package_task类