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 更多精彩请直接 ...
随机推荐
- mybatis中#{}与${}的差别(如何防止sql注入)
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- python多种格式数据加载、处理与存储
多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...
- 移动端视网膜(Retina)屏幕下1px边框线 解决方案
原因: 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在devicePixelRatio=2的retina屏下会显示成2px. 但在IOS8中,已经支持0.5px了,那就意味着, 在de ...
- Windows下C编程获取软件安装列表信息
代码如下: #include <windows.h> #include <stdio.h> #include <iostream> #include <vec ...
- jQuery插件开发代码
方法和原理在这篇博文中非常详细易懂 http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 下面整理下基本知识点和基本的代码段: jQue ...
- 【转】使用Python matplotlib绘制股票走势图
转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...
- WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)
1. 概述 CXF允许我们在webservice的in/out位置添加拦截器.拦截器有两大分类,一类是系统预定义的:另一类是自定义拦截器. 2. 在server端添加拦截器. JaxWsServerF ...
- npm提速
解决办法:npm --> cnpm https://npm.taobao.org
- Python 30分钟入门——数据类型 and 控制结构
Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,如果你是在Windows上学习Pytho ...