NFC读写实例
package com.sy.nfc.test; import java.io.IOException; import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.nfc.tech.NfcA;
import android.os.Bundle;
import android.os.Parcelable;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; /**
*
* @author shenyang
* @see
* @des
*
* Nfc 标签的扫描
*
*
*/
@SuppressLint("NewApi")
public class ReadTag extends Activity {
private NfcAdapter nfcAdapter;
private TextView resultText;
private PendingIntent pendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
private Button mJumpTagBtn;
private boolean isFirst = true; @SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取nfc适配器,判断设备是否支持NFC功能
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, getResources().getString(R.string.no_nfc),
Toast.LENGTH_SHORT).show();
finish();
return;
} else if (!nfcAdapter.isEnabled()) {
Toast.makeText(this, getResources().getString(R.string.open_nfc),
Toast.LENGTH_SHORT).show();
finish();
return;
}
setContentView(R.layout.read_tag);
// 显示结果Text
resultText = (TextView) findViewById(R.id.resultText);
// 写入标签按钮
mJumpTagBtn = (Button) findViewById(R.id.jump);
mJumpTagBtn.setOnClickListener(new WriteBtnOnClick()); pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
ndef.addCategory("*/*");
mFilters = new IntentFilter[] { ndef };// 过滤器
mTechLists = new String[][] {
new String[] { MifareClassic.class.getName() },
new String[] { NfcA.class.getName() } };// 允许扫描的标签类型 } @SuppressLint("NewApi")
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
nfcAdapter.enableForegroundDispatch(this, pendingIntent, mFilters,
mTechLists);
if (isFirst) {
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())) {
String result = processIntent(getIntent());
resultText.setText(result);
}
isFirst = false;
} } @Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
String result = processIntent(intent);
resultText.setText(result);
}
} /**
* 获取tab标签中的内容
*
* @param intent
* @return
*/
@SuppressLint("NewApi")
private String processIntent(Intent intent) {
Parcelable[] rawmsgs = intent
.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawmsgs[0];
NdefRecord[] records = msg.getRecords();
String resultStr = new String(records[0].getPayload());
return resultStr;
} /**
* 按钮点击事件
*
* @author shenyang
*
*/
class WriteBtnOnClick implements OnClickListener { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.jump:
Intent intent = new Intent(ReadTag.this, WriteTag.class);
startActivity(intent);
default:
break;
}
} } }
读标签内容代码展开
package com.sy.nfc.test; import java.io.IOException; import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.nfc.tech.NfcA;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; /**
* 写入标签
*
* @warn:弹出dialog 允许写入
* @author shenyang
*
*/
@SuppressLint("NewApi")
public class WriteTag extends Activity { private IntentFilter[] mWriteTagFilters;
private NfcAdapter nfcAdapter;
PendingIntent pendingIntent;
String[][] mTechLists;
Button writeBtn;
boolean isWrite = false;
EditText mContentEditText; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.write_tag);
writeBtn = (Button) findViewById(R.id.writeBtn);
writeBtn.setOnClickListener(new WriteOnClick());
mContentEditText = (EditText) findViewById(R.id.content_edit);
// 获取nfc适配器,判断设备是否支持NFC功能
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, getResources().getString(R.string.no_nfc),
Toast.LENGTH_SHORT).show();
finish();
return;
} else if (!nfcAdapter.isEnabled()) {
Toast.makeText(this, getResources().getString(R.string.open_nfc),
Toast.LENGTH_SHORT).show();
finish();
return;
}
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// 写入标签权限
IntentFilter writeFilter = new IntentFilter(
NfcAdapter.ACTION_TECH_DISCOVERED);
mWriteTagFilters = new IntentFilter[] { writeFilter };
mTechLists = new String[][] {
new String[] { MifareClassic.class.getName() },
new String[] { NfcA.class.getName() } };// 允许扫描的标签类型 } /**
* 写入标签按钮点击事件监听
*
* @author shenyang
*
*/
class WriteOnClick implements OnClickListener { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
isWrite = true;
AlertDialog.Builder builder = new AlertDialog.Builder(WriteTag.this)
.setTitle("请将标签靠近!");
builder.setNegativeButton("确定",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
mContentEditText.setText("");
isWrite = false;
WriteTag.this.finish();
}
});
builder.setPositiveButton("取消",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
isWrite = false;
}
});
builder.create();
builder.show();
}
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
nfcAdapter.enableForegroundDispatch(this, pendingIntent,
mWriteTagFilters, mTechLists);
} // 写入模式时,才执行写入操作
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
if (isWrite == true
&& NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NdefMessage ndefMessage = getNoteAsNdef();
if (ndefMessage != null) {
writeTag(getNoteAsNdef(), tag);
} else {
showToast("请输入您要写入标签的内容");
}
}
} // 根据文本生成一个NdefRecord
private NdefMessage getNoteAsNdef() {
String text = mContentEditText.getText().toString();
if (text.equals("")) {
return null;
} else {
byte[] textBytes = text.getBytes();
// image/jpeg text/plain
NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
"image/jpeg".getBytes(), new byte[] {}, textBytes);
return new NdefMessage(new NdefRecord[] { textRecord });
} } // 写入tag
boolean writeTag(NdefMessage message, Tag tag) { int size = message.toByteArray().length; try {
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
ndef.connect(); if (!ndef.isWritable()) {
showToast("tag不允许写入");
return false;
}
if (ndef.getMaxSize() < size) {
showToast("文件大小超出容量");
return false;
} ndef.writeNdefMessage(message);
showToast("写入数据成功.");
return true;
} else {
NdefFormatable format = NdefFormatable.get(tag);
if (format != null) {
try {
format.connect();
format.format(message);
showToast("格式化tag并且写入message");
return true;
} catch (IOException e) {
showToast("格式化tag失败.");
return false;
}
} else {
showToast("Tag不支持NDEF");
return false;
}
}
} catch (Exception e) {
showToast("写入数据失败");
} return false;
} private void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
}
写入标签代码展开
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sy.nfc.test"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.NFC" /> <uses-feature
android:name="android.hardware.nfc"
android:required="true" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.sy.nfc.test.ReadTag"
android:label="@string/app_name"
android:launchMode="singleTop" >
<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.TECH_DISCOVERED" />
</intent-filter> <meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
<activity android:name="com.sy.nfc.test.WriteTag" >
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
</intent-filter>
</activity>
</application> </manifest>
配置文件展开
已经非常详细了。源码下载:
http://download.csdn.net/detail/sy_hx/6307597
可以直接运行。主要就是NFC的读写实例。有需要的下载看看
点我下载
NFC读写实例的更多相关文章
- NFC读写器调试总结20191203
以下为NFC读写器调试经验总结: 1.读写器部分,从TX1/TX2输出的13.56MHZ信号主要由L0/C0构成低通滤波器,用于滤除13.56MHZ的高次谐波,取值L0=1UH,C0=47PF时候,谐 ...
- C# XML读写实例
一.使用System.Xml 实例:完成如下格式配置文件的读写操作: <?xml version="1.0" encoding="UTF-8"?> ...
- NFC读写电子便签总结
编写NFC程序的基本步骤 1)设置权限,限制Android版本.安装的设备: 1 2 3 4 <uses-sdk android:minSdkVersion="14"/> ...
- NFC应用实例
package com.example.mynfcdemon; import android.app.Activity;import android.nfc.NfcAdapter;import and ...
- boost::lockfree::queue多线程读写实例
最近的任务是写一个多线程的东西,就得接触多线程队列了,我反正是没学过分布式的,代码全凭感觉写出来的,不过运气好,代码能够work= = 话不多说,直接给代码吧,一个多消费者,多生产者的模式.假设我的任 ...
- 13.56Mhz/NFC读写器天线阻抗匹配调试步骤-20191128
相关原文: https://blog.csdn.net/wwt18811707971/article/details/80641432 http://www.52rd.com/Blog/Detail_ ...
- Android NFC M1卡读写&芯片卡读写(CPU卡读写)(RFID读写)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sgn5200/article/detai ...
- NFC应用(二)读写器模式
NFC第二种应用场境就是所谓的读写器模式.既然有卡,当然就会有读写器,这两种模式是配合在一起使用的.两个卡放一起不能通信,两个读写器模式的设备也不能通信. NFC读写器一般支持以下一种或多种协议:Mi ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
随机推荐
- nodejs querystring参数处理
在node js z中,用querystring来进行客户端与服务器的数据交换时序列化数据,是数据处理的小利器. 如:在node中执行这个命令:querystring.stringify({numbe ...
- Linux 计划任务 访问网页
1.linux安装 [root@CentOS ~]# yum -y install vixie-cron[root@CentOS ~]# yum -y install crontabs 说明:vixi ...
- python 反射
python 反射的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动! 反射的四个基本函数使用 hasattr,getattr,setatt ...
- 【先定一个小目标】Redis 安装成windows服务-开机自启
1.第一步安装成windows服务的,开机自启动 redis-server --service-install redis.windows.conf 2.启动\关闭 redis-server --se ...
- 带有runat="server" 的服务器控件通过 ClientID 获取Id
带有runat="server" 的服务器控件 获取Id <input type="text" id="txtName" runat= ...
- Velocity 局部定制模板
Velocity介绍 Velocity是一个基于java的template engine.它允许Web designer引用Java Code中定义的方法.Web designer可以和Java工程师 ...
- Nacl开发
环境搭建:http://www.bojinxiaozhu.com/2014/0221/80.html http://blog.csdn.net/xoyojank/article/details/814 ...
- iOS小知识:使UIButton中的图片和文字实现左对齐
UIButton setImage 和 setTitle之后,默认的 image和title 对齐方式是居中, 由于 title 长度不固定,所以如果要几个这样有image有title的按钮纵向排列对 ...
- 关于robotframework,app,appium的xpath定位问题及常用方法
关于类似的帖子好像很多,但是没有找到具体能帮我解决问题的办法.还是自己深究了好久才基本知道app上面的xpath定位和web上的不同点: 先放一个图: A,先说说不用xpath的场景,一般是用于存在i ...
- memcache服务器端及PHP memcache扩展的安装(转载)
memcache服务器端的安装(windows版) 1.下载memcached软件 32位下载地址: memcached-win32-1.4.4-14.zip(直接下载) 下载页面: 64位下载 ...