10、NFC技术:读写NFC标签中的文本数据

代码实现过程如下:
读写NFC标签的纯文本数据.java
import java.nio.charset.Charset;
import java.util.Locale; import android.app.Activity;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView; /**
* 主 Activity
* 读写NFC标签的纯文本数据
* @author dr
*
*/
public class ReadWriteTextMainActivity extends Activity {
private TextView mInputText;
private String mText; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_write_text_main); mInputText = (TextView) findViewById(R.id.textview_input_text);
} protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == 1) {
mText = data.getStringExtra("text");
mInputText.setText(mText);
}
} public void onNewIntent(Intent intent) {
// read nfc text
if (mText == null) {
// 显示NFC标签内容
Intent myIntent = new Intent(this, ShowNFCTagContentActivity.class);
myIntent.putExtras(intent);
myIntent.setAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
startActivity(myIntent); } else { // write nfc text
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NdefMessage ndefMessage = new NdefMessage(
new NdefRecord[] { createTextRecord(mText) });
writeTag(ndefMessage, tag);
}
} /**
* 将纯文本转换成NdefRecord对象。
* @param text
* @return
*/
public NdefRecord createTextRecord(String text) {
// 得到生成语言编码字节数组
byte[] langBytes = Locale.CHINA.getLanguage().getBytes(
Charset.forName("US-ASCII"));
Charset utfEncoding = Charset.forName("UTF-8");
byte[] textBytes = text.getBytes(utfEncoding);
int utfBit = 0;
// 状态字节
char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length];
data[0] = (byte) status;
// 数组拷贝
System.arraycopy(langBytes, 0, data, 1, langBytes.length);
System.arraycopy(textBytes, 0, data, 1 + langBytes.length,
textBytes.length); NdefRecord ndefRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT, new byte[0], data);
return ndefRecord;
} boolean writeTag(NdefMessage ndefMessage, Tag tag) {
try {
Ndef ndef = Ndef.get(tag);
ndef.connect();
ndef.writeNdefMessage(ndefMessage);
return true;
} catch (Exception e) {
// TODO: handle exception
}
return false;
} // 向NFC标签写入文本
public void onClick_InputText(View view) {
Intent intent = new Intent(this, InputTextActivity.class);
startActivityForResult(intent, 1);
} }
读写NFC标签的纯文本数据.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick_InputText"
android:text="输入要写入文本" /> <TextView
android:id="@+id/textview_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" /> <TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="请将NFC标签靠近手机背面读取或写入文本"
android:textColor="#F00"
android:textSize="16sp" /> <ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/read_nfc_tag" /> </LinearLayout>
显示NFC标签内容.java
import cn.eoe.read.write.text.library.TextRecord;
import android.app.Activity;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.TextView; /**
* 显示NFC标签内容
* @author dr
*
*/
public class ShowNFCTagContentActivity extends Activity { private TextView mTagContent;
private Tag mDetectedTag; // 传递过来的NFC的一个TAG对象
private String mTagText; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_nfctag_content);
mTagContent = (TextView) findViewById(R.id.textview_tag_content); mDetectedTag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG); Ndef ndef = Ndef.get(mDetectedTag); mTagText = ndef.getType() + "\nmax size:" + ndef.getMaxSize()
+ "bytes\n\n"; readNFCTag(); mTagContent.setText(mTagText);
} /**
*
*/
private void readNFCTag() {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msgs[] = null;
int contentSize = 0;
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
contentSize += msgs[i].toByteArray().length;
}
}
try {
if (msgs != null) {
NdefRecord record = msgs[0].getRecords()[0];
TextRecord textRecord = TextRecord.parse(record);
mTagText += textRecord.getText() + "\n\ntext\n"
+ contentSize + " bytes";
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
显示NFC标签内容.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/textview_tag_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" android:layout_margin="6dp" /> </LinearLayout>
向NFC标签写入文本.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText; /**
* 向NFC标签写入文本
*
* @author dr
*
*/
public class InputTextActivity extends Activity { private EditText mTextTag; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_text);
mTextTag = (EditText) findViewById(R.id.edittext_text_tag);
} public void onClick_OK(View view) {
Intent intent = new Intent();
intent.putExtra("text", mTextTag.getText().toString());
setResult(1, intent);
finish(); }
}
向NFC标签写入文本.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="请输入要写入的文本" android:textSize="16sp" /> <EditText
android:layout_marginTop="10dp"
android:id="@+id/edittext_text_tag"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick_OK"
android:text="确定" /> </LinearLayout>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.eoe.read.write.text"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.NFC" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".ReadWriteTextMainActivity"
android:label="读写NFC标签的纯文本数据"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name=".ShowNFCTagContentActivity"
android:label="显示NFC标签内容"
android:launchMode="singleTask" /> <activity
android:name=".InputTextActivity"
android:label="向NFC标签写入文本" /> </application> </manifest>
DEMO:下载地址:http://download.csdn.net/detail/androidsj/7678947
10、NFC技术:读写NFC标签中的文本数据的更多相关文章
- JS修改标签中的文本且不影响其中标签
/********************************************************************* * JS修改标签中的文本且不影响其中标签 * 说明: * ...
- 如何给HTML标签中的文本设置修饰线
text-decoration属性介绍 text-decoration属性是用来设置文本修饰线呢,text-decoration属性一共有4个值. text-decoration属性值说明表 值 作用 ...
- selenium获取标签中的文本
# 寻找文本所在的标签waitClickCompanyName = driver.find_elements_by_xpath('//div[@id="nsrzt"]//li') ...
- 12、NFC技术:读写NFC标签中的Uri数据
功能实现,如下代码所示: 读写NFC标签的Uri 主Activity import cn.read.write.uri.library.UriRecord; import android.app.Ac ...
- android官方技术文档翻译——Case 标签中的常量字段
本文译自androd官方技术文档<Non-constant Fields in Case Labels>,原文地址:http://tools.android.com/tips/non-co ...
- p标签中的文本换行
参考文章 word-break:break-all和word-wrap:break-word的区别 CSS自动换行.强制不换行.强制断行.超出显示省略号 属性介绍 white-space: 如何处理元 ...
- js向标签中添加文本或其他的简例
1.如何用js 在div内插入内容? 不是改变内容,而是插入,就是在保留原内容的基础上,在尾部添加.举个例子. 元内容<div>你好</div> 插入后<div>你 ...
- QT中读取文本数据(txt)
下面的代码实现读取txt文档中的数据,并且是一行一行的读取. void MainWindow::on_pushButton_clicked() { QFile file("abcd.txt& ...
- 用pandas库对csv文件中的文本数据进行分析处理
#数据分析 import pandas import csv old_path = r'd:\2000W\200W-400W.csv' f = open(old_path,'r',encoding=' ...
随机推荐
- android 点九PNG技术 适应不同分辨率 完美显示效果
.9.png是一种非失真性压缩位图图形文件格式.PNG格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性.现在有很多人使用PNG格式于互联网及 ...
- 学习了初级的Python
今天傍晚完成了Code Academy上Python的所有练习,感觉Python的原力在我身体里流淌......下面要学习一些进阶的东西.之前Zhi哥跟我说Python比较简单,我还不太信.其实早在四 ...
- MyBatis学习总结_03_优化MyBatis配置文件中的配置
一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 <?xml version=" ...
- 配置Linux系统网卡连接网络
本实验需要两台虚拟机来完成,环境如下: 主机名称 操作系统 ip地址 本地主机 RHEL7_64 192.168.157.134 -> 192.168.129.127 远程主机 CentOS 6 ...
- Linux命令-yum
定义 yum仓库是为进一步简化RPM管理软件难而设计的,yum能够根据用户的要求分析出所需软件包以及相关依赖关系,自动从服务器下载软件包并安装到系统. 实例
- 自己用反射写的一个request.getParameter工具类
适用范围:当我们在jsp页面需要接收很多值的时候,如果用request.getParameter(属性名)一个一个写的话那就太麻烦了,于是我想是 否能用反射写个工具类来简化这样的代码,经过1个小时的代 ...
- Ubuntu环境下eclipse的hadoop开发
在安装好hadoop伪分布式后,开始搭建eclipse的hadoop开发环境 我的版本信息如下: Ubuntu 版本 12.10 Hadoop版本 1.2.1 Java版本 1.6.0_31(命令j ...
- CEdit的简单用法
今晚闲来无事,写篇博文聊解解闷~ CEdit这个空间类,我之前倒是用过,不过那个时候用的还比较菜,现在么,依旧比较菜~ 首先,因为我今天刚做完了一个局域网聊天软件,用的就是CEdit来显示和获取数据的 ...
- [POJ3264]Balanced Lineup(RMQ, ST算法)
题目链接:http://poj.org/problem?id=3264 典型RMQ,这道题被我鞭尸了三遍也是醉了…这回用新学的st算法. st算法本身是一个区间dp,利用的性质就是相邻两个区间的最值的 ...
- Python自带包建立简单web服务器
在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认8000] 例如: python -m SimpleHTTPServer 8080 然后就可 ...