NDEF:
NFC Data Exchange Format:NFC数据交换格式,NFC组织约定的NFC tag中的数据格式。他是轻量级的紧凑的二进制格式,可带有URL、vCard和NFC定义的各种数据类型
android nfc中Ndef格式的读写
检测到标签后在Activity中的处理流程
1.在onCreate()中获取NFCAdapter对象
NfcAdapter nfcAdapter=NfcAdapter.getDefaultAdapter(this);
2.在onNewIntent()中获取Tag对象或是NdefMessage信息
获取Tag对象:
Tag tag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
获取DeafMessage信息:
Parcelabel[] rawMsgs=getIntent().getParcelabelArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
3.也可以通过Tag创建Ndef对象等,以实现标签的属性和I/O操作
Ndef ndef=Ndef.get(tag);
NDEF格式标签的读取流程
1.在onCreate()中获取NFCAdapter对象;
2.在onNewIntent()中判断是否为NDEF格式标签(ACTION_NDEF_DISCOVERED),若是则获取NdefMessage信息;(需要强制转换成NdefMessage对象)
Parcelabel[] rawMsgs=getIntent().getParcelabelArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
3.对NdefMessage对象进行解析,获取相关的文本信息或Uri等。
NDEF格式标签的写入流程
1.在onCreate()中获取NFCAdapter对象
2.在onNewIntent()中获取tag对象
Tag tag =intent.getparcelabelExtra(NfcAdapter.EXTRA_TAG);
3.通过Tag创建Ndef对象
Ndef ndef=Ndef.get(tag);
4.将文本数据封装成NdefMessage
5.判断是否为NDEF格式标签
若是NDEF格式:
(1)允许进行标签操作:ndef.connect();
(2)调用ndef.writeNdefMessage(NdefMessage)方法写入。
若非NDEF格式:
(1)NdefFromatable format=NdefFromatable.get();
(2)允许进行标签操作:format.connect();
(3)调用ndef.writeNdefMessage(NdefMessage)方法写入。
NFC的基本类
Android平台提供了两个android.nfc和android.nfc.tech包,里面有API来实现NFC标签的操作。
android.nfc包主要有4个类:
NFCManager类:可以用来滚利Android设备中指出的所有NFC Adapter,但由于大部分Android设备只支持一个NFC Adapter,可以直接使用getDefaultAdapter方法来获得系统支持的Adapter
NFCAdapter类:本设备的NFC adapter,可以定义Intent来请求江系统检测到tags的提醒发送到你的Activity,并提供发送方去注册前台tag提醒发布和前台NDEF推送
NdefMessage类:NDEF是NFC论坛定义的数据结构,用来有效的存数据到标签中,如文本,URL和其他MIME类型一个NdefMessage扮演一个容器,这个容器存放发送和读到的数据,一个NdefMessage对象包含0或多个NdefRecord,每个NDEF record有一个类型,比如文本,URL等,在NDEFMessage里的第一个NFCRecord的类型用来发送tag到一个android设备的activity
Tag类:表示一个被动的NFC目标,比如tag,card等,可提供对标签的各种操作方法。
NFC前台调度
将处理NFC标签的权利交给某个窗口(优先级最高)
1.在onCreate()中获得NFCAdapter对象
2.创建与该Activity关联的PendingIntent
3.指定一个用于处理NFC标签的窗口,通常会在onResume()方法中采用nfcAdapter.enableForegroundDispatch()来实现
4.禁止窗口处理NFC标签,爱用nfcAdapter.disableForegroundDispatch()来实现
点对点的数据交换
前台推送技术支持简单点对点的数据交换,可以用enableForegroundNdefPush(Activity,NdefMessage)方法来打开此功能,用这个功能
要打开前台推送:
原文:http://www.cnblogs.com/chhom/p/5127880.html