NFC应用实例
package com.example.mynfcdemon;
import android.app.Activity;
import android.nfc.NfcAdapter;
import android.os.Bundle;
public class MainActivity extends Activity {
//private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//nfcAdapter = NfcAdapter.getDefaultAdapter(this);
//运行APK 把标签靠近识别区即可。
}
}
-------------------------------
package com.example.mynfcdemon;
import java.io.IOException;
import android.nfc.tech.NfcV;
public class NfcVUtil {
private NfcV mNfcV;
//UID数组行式
private byte[] ID;
private String UID;
private String DSFID;
private String AFI;
//block的个数
private int blockNumber;
//一个block长度
private int oneBlockSize;
//信息
private byte[] infoRmation;
/*@function :初始化
@param :mNfcV NfcV对象
@return :返回内容byte[]
@author: :Demon 503536038@qq.com
*/
public NfcVUtil(NfcV mNfcV) throws IOException{
this.mNfcV = mNfcV;
ID = this.mNfcV.getTag().getId();
byte[] uid = new byte[ID.length];
int j = 0;
for(int i = ID.length - 1; i>=0; i-- ){
uid[j] = ID[i];
j++;
}
this.UID = printHexString(uid);
getInfoRmation();
System.out.println("UID:" + getUID()
+"AFI:" + getAFI()
+"DSFID:" + getDSFID()
+"BlockNumber:" + getBlockNumber()
+"BlockSize:" + getOneBlockSize());
}
public String getUID() {
return UID;
}
/*@function :取得标签信息
@return :返回内容byte[]
@author: :Demon 503536038@qq.com
*/
private byte[] getInfoRmation() throws IOException{
byte[] cmd = new byte[10];
cmd[0] = (byte) 0x22; //flag
cmd[1] = (byte) 0x2B; //command
System.arraycopy(ID, 0, cmd, 2, ID.length); // UID
infoRmation = mNfcV.transceive(cmd);
blockNumber = infoRmation[12];
oneBlockSize = infoRmation[13];
AFI = printHexString(new byte[]{infoRmation[11]});
DSFID = printHexString(new byte[]{infoRmation[10]});
return infoRmation;
}
public String getDSFID() {
return DSFID;
}
public String getAFI() {
return AFI;
}
public int getBlockNumber(){
return blockNumber + 1;
}
public int getOneBlockSize() {
return oneBlockSize + 1;
}
/*@function :读取一个位置在position的block
@param :position 要读取的block位置
@return :返回内容字符串
@author: :Demon 503536038@qq.com
*/
public String readOneBlock(int position) throws IOException{
byte cmd[] = new byte[11];
cmd[0] = (byte) 0x22;
cmd[1] = (byte) 0x20;
System.arraycopy(ID, 0, cmd, 2, ID.length); //UID
cmd[10] = (byte) position;
byte res[] = mNfcV.transceive(cmd);
for(int i=0; i < res.length; i++){
System.out.println("/" + res[i]);
}
String r = new String(res);
System.out.println("/" + r);
if(res[0] == 0x00){
byte block[] = new byte[res.length - 1];
System.arraycopy(res, 1, block, 0, res.length - 1);
//return printHexString(block);
String blockstr = new String(block);
return blockstr;
}
return null;
}
/*@function :读取从begin开始end个block
@instructions :begin + count 不能超过blockNumber
@param :begin block开始位置
@param :count 读取block数量
@return :返回内容字符串
@author: :Demon 503536038@qq.com
*/
public String readBlocks(int begin, int count) throws IOException{
if((begin + count)>blockNumber){
count = blockNumber - begin;
}
StringBuffer data = new StringBuffer();
for(int i = begin; i<=count + begin; i++){
data.append(readOneBlock(i));
}
return data.toString();
}
/* 将byte[]转换成16进制字符串
@param data 要转换成字符串的字节数组
@return 16进制字符串
*/
private String printHexString(byte[] data) {
StringBuffer s = new StringBuffer();;
for (int i = 0; i < data.length; i++) {
String hex = Integer.toHexString(data[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
s.append(hex);
}
return s.toString();
}
/* 将数据写入到block,
@param position 要写内容的block位置
@param data 要写的内容,必须长度为blockOneSize
@return false为写入失败,true为写入成功
@throws IOException */
public boolean writeBlock(int position, byte[] data) throws IOException{
byte cmd[] = new byte[15];
cmd[0] = (byte) 0x22;
cmd[1] = (byte) 0x21;
System.arraycopy(ID, 0, cmd, 2, ID.length);// UID
//block
cmd[10] = (byte) position;
//value
System.arraycopy(data, 0, cmd, 11, data.length);
byte[]rsp = mNfcV.transceive(cmd);
if(rsp[0] == 0x00){
return true;
}
return false;
}
public boolean writeStrToTag(String str){
return false;
}
}
---------------------------------
package com.example.mynfcdemon;
import java.io.IOException;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter.MalformedMimeTypeException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.NfcV;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.TextView;
public class TagView extends Activity{
// NFC parts
private static NfcAdapter mAdapter;
private static PendingIntent mPendingIntent;
private static IntentFilter[] mFilters;
private static String[][] mTechLists;
private TextView texttagid;
private TextView texttagdata;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tag_vierwr);
texttagdata = (TextView) findViewById(R.id.tagdatatext);
texttagid = (TextView) findViewById(R.id.tagidtext);
mAdapter = NfcAdapter.getDefaultAdapter(this);
// Create a generic PendingIntent that will be deliver to this activity.
// The NFC stack
// will fill in the intent with the details of the discovered tag before
// delivering to
// this activity.
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// Setup an intent filter for all MIME based dispatches
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
ndef.addDataType("*/*");
} catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[] { ndef, };
// Setup a tech list for all NfcV tags
mTechLists = new String[][] { new String[] { NfcV.class.getName() } };
try {
rfid_scanresult(getIntent());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void rfid_scanresult(Intent intent) throws IOException{
String action = intent.getAction();
if(NfcAdapter.ACTION_NDEF_DISCOVERED == action
|| NfcAdapter.ACTION_TECH_DISCOVERED == action
|| NfcAdapter.ACTION_TAG_DISCOVERED == action){
//if(NfcAdapter.ACTION_TECH_DISCOVERED == action){
//byte[] tagid = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] tagid = tag.getId();
//String strid = new String(tagid);
//System.out.println("TAGID:"+strid);
//System.out.println("TAGID:"+bytesToHexString(tagid));
//texttagid.setText("TagID=" + bytesToHexString(tagid));
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcv = NfcV.get(tagFromIntent);
nfcv.connect();
NfcVUtil mNfcVutil = new NfcVUtil(nfcv);
texttagid.setText("UID:" + mNfcVutil.getUID()+'\n'
+"AFI:" + mNfcVutil.getAFI()+'\n'
+"DSFID:" + mNfcVutil.getDSFID()+'\n'
+"BlockNumber:" + mNfcVutil.getBlockNumber()+'\n'
+"BlockSize:" + mNfcVutil.getOneBlockSize());
//NfcVClassCard mifareClassCard=null;
texttagdata.setText("block0:"+mNfcVutil.readOneBlock(0)
+"block1:"+mNfcVutil.readOneBlock(1)+'\n'
+"block2:"+mNfcVutil.readOneBlock(2)
+"block3:"+mNfcVutil.readOneBlock(3)+'\n'
+"block4:"+mNfcVutil.readOneBlock(4)
+"block5:"+mNfcVutil.readOneBlock(5)+'\n'
+"block6:"+mNfcVutil.readOneBlock(6)
+"block7:"+mNfcVutil.readOneBlock(7)+'\n'
+"block8:"+mNfcVutil.readOneBlock(8)
+"block9:"+mNfcVutil.readOneBlock(9)+'\n'
+"block10:"+mNfcVutil.readOneBlock(10)
+"block11:"+mNfcVutil.readOneBlock(11)+'\n'
+"block12:"+mNfcVutil.readOneBlock(12)
+"block13:"+mNfcVutil.readOneBlock(13)+'\n'
+"block14:"+mNfcVutil.readOneBlock(14)
+"block15:"+mNfcVutil.readOneBlock(15)+'\n'
+"block16:"+mNfcVutil.readOneBlock(16)
+"block17:"+mNfcVutil.readOneBlock(17)+'\n'
+"block18:"+mNfcVutil.readOneBlock(18)
+"block19:"+mNfcVutil.readOneBlock(19)+'\n'
+"block20:"+mNfcVutil.readOneBlock(20)
+"block21:"+mNfcVutil.readOneBlock(21)+'\n'
+"block22:"+mNfcVutil.readOneBlock(22)
+"block23:"+mNfcVutil.readOneBlock(23)+'\n'
+"block24:"+mNfcVutil.readOneBlock(24)
+"block25:"+mNfcVutil.readOneBlock(25)+'\n'
+"block26:"+mNfcVutil.readOneBlock(26)
+"block27:"+mNfcVutil.readOneBlock(27)+'\n'
+"Read:"+ mNfcVutil.readBlocks(0, 28)
);
/*String str;
str = getNdefMessages(intent).toString();
System.out.println("Ndef::"+str);*/
String s = "kaic";
mNfcVutil.writeBlock(0, s.getBytes());
}
}
NdefMessage[] getNdefMessages(Intent intent) {
// Parse the intent
NdefMessage[] msgs = null;
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
Parcelable[] rawMsgs =intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
else {
// Unknown tag type
byte[] empty = new byte[] {};
NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty,empty);
NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
msgs = new NdefMessage[] {msg};
}
}
else {
// Log.e(TAG, "Unknown intent " + intent);
finish();
}
return msgs;
}
void write_NdefFormatableTag(){
/*NdefFormatable tag = NdefFormatable.get(t);
Locale locale = Locale.US;
final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
String text = "Tag, you're it!";
final byte[] textBytes = text.getBytes(Charsets.UTF_8);
final int utfBit = 0;
final char status = (char) (utfBit + langBytes.length);
final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
NdefRecord record = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, newbyte[0], data);
try {
NdefRecord[] records = {text};
NdefMessage message = new NdefMessage(records);
tag.connect();
tag.format(message);
}
catch (Exception e){
//do error handling
}*/
}
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
}
NFC应用实例的更多相关文章
- NFC读写实例
package com.sy.nfc.test; import java.io.IOException; import android.nfc.NdefMessage; import android. ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- [安卓] 15、用NFC解锁手机并自动打开应用
最近接到一个项目:将手机放到一个带有NFC卡的底座上手机会自动解锁,然后打开相应的应用 本人用:杭州公交通用卡做为NFC卡+Coolpad手机进行试验 效果如下: 1.手机本身带有图案锁,输对图案才能 ...
- Android NFC开发概述
NFC手机相比普通手机来说,有以下3个附加功能: 1.可以当成POS机来用,也就是“读取”模式 2.可以当成一张卡来刷,也就是NFC技术最核心的移动支付功能 3.可以像蓝牙.Wi-Fi一样做点 ...
- nfc开发
很多Android设备已经支持NFC(近距离无线通讯技术)了.本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发. Android NFC开发环境 使用硬件:Google Nexu ...
- Android开发之深入理解NFC(一)
深入理解NFC NFC(Near field communication,近场通信)也叫做近距离无线通信技术. 从原理来说,NFC和wifi类似,二者都利用无线射频技术来实现设备之间的通信. 但是,和 ...
- 硅谷新闻2--禁止viewpager预加载
ContentFragment.java class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { ..... ...
- android 技术相关Blog
android 技术相关 LVXIANGAN的专栏 http://blog.csdn.net/LVXIANGAN/article/category/1101038 Android NFC 开发实例 h ...
- [转]【eoeAndroid索引】史上最牛最全android开发知识汇总
一.开发环境搭建 (已完成) 负责人:kris 状态:已完成 所整理标签为:搭建 SDK JDK NDK Eclipse ADT 模拟器 AVD 调试器(DEBUG) DDMS 测试 日志 Logca ...
随机推荐
- matlab 椭圆方程拟合
拟合椭圆首先要知道各个点的坐标,然和带入如下公式: x = [59 136 58 137 57 137 56 137 55 138 54 139 53 140 52 141 51 142 51 143 ...
- Unable to load type System.Data.Entity.DynamicProxiesXXXXXrequired for deserialization.
Memcache实例的Get方法时抛出了异常“Unable to load type System.Data.Entity.DynamicProxies.AdInfoItems_19CD09C8E46 ...
- MVC ckeditor的基本使用
之前在自己的WebForm练习项目里面用到过ckeditor,时隔蛮久后,今天再一次把ckeditor运用到MVC里面,用于最近着手开发的企业站的新闻动态的内容之新增与修改. 找到的资料都说要把下载的 ...
- 在C++中调用DLL中的函数 (3)
1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...
- 代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码
代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码
- IE 不兼容的几个js问题及解决方法1
IE 不兼容的几个js问题及解决方法 1 Table的问题 在动态新增tr或者td时,createElecment() 一般用appendChild();都不生效,解决办法是用新增tbody, 如 ...
- leetcode 110
110. Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...
- Servlet小试
Java响应Http请求: 1.创建项目 因为对Java环境不是很熟悉,第一步卡住了好长时间, javax怎么引用, 在Java EE 5 Libraries中的javaee.jar中,项目中怎么引用 ...
- 四、Struts2的执行过程和原理
执行过程和原理(可能面试题) 学习目标:熟知struts2的执行过程(下图记住).源码可以不看 a.过滤器的初始化 .StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有 ...
- python简单的发送邮件
python 利用smtplib来发送邮件,具体的代码如下 一. 编辑smtp_v2.py vim /home/python/smtp_v2.py #!/usr/bin/env python # -* ...