编写NFC程序的基本步骤

1)设置权限,限制Android版本、安装的设备:

1
2
3
4
<uses-sdk android:minSdkVersion="14"/>
<uses-permission android:name="android.permission.NFC" />
<!-- 要求当前设备必须要有NFC芯片 -->
<uses-feature android:name="android.hardware.nfc" android:required="true"

public class NfcManager {

private NfcAdapter mNfcAdapter;
private boolean mEnabled;
private WeakReference<Activity> mActivityWeakReference;
private MessageListener mMessageListener;
private NfcAdapter.ReaderCallback mReaderCallback = new NfcAdapter.ReaderCallback() {
@Override
public void onTagDiscovered(Tag tag) {
processTag(tag);
}
};

private NfcManager(NfcAdapter nfcAdapter) {
mNfcAdapter = nfcAdapter;
}
public static NfcManager get(Context context) {
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(context);
if (nfcAdapter != null) {
return new NfcManager(nfcAdapter);
} else {
return null;
}
}
/**
* 设备是否支持nfc
*/
public static boolean testSupportNfc(Context context) {
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(context);
if (nfcAdapter == null) {
T.showShort(InspectionApplication_.getApplication(), Tools.getStringValue(
InspectionApplication_.getApplication(), R.string.dialog_not_support_NFC));
return false;
}
if (!nfcAdapter.isEnabled()) {
T.showShort(InspectionApplication_.getApplication(), Tools.getStringValue(
InspectionApplication_.getApplication(), R.string.please_open_nfc));
context.startActivity(new Intent("android.settings.NFC_SETTINGS"));
return false;
}
return true;
}
public synchronized boolean enable(Activity activity, MessageListener listener) {
if (mEnabled) {
return true;
}
if (!mNfcAdapter.isEnabled()) {
return false;
}
mNfcAdapter.enableReaderMode(activity, mReaderCallback, NfcAdapter.FLAG_READER_NFC_A, null);
mActivityWeakReference = new WeakReference<>(activity);
mMessageListener = listener;
mEnabled = true;
return true;
}
public synchronized boolean disable(Activity activity) {
if (!mEnabled) {
return true;
}
if (activity != mActivityWeakReference.get()) {
return false;
}
mNfcAdapter.disableReaderMode(activity);
mActivityWeakReference.clear();
mActivityWeakReference = null;
mMessageListener = null;
mEnabled = false;
return true;
}
private void processTag(Tag tag) {
try {
List<String> techs = Arrays.asList(tag.getTechList());
if (!techs.contains("android.nfc.tech.Ndef")) {
Log.e("NDEF not included");
return;
}
String msg = "BEGIN:VCARD\n" + "VERSION:2.1\n" + "中国湖北省武汉市\n"
+ "武汉大学计算机学院\n" + "END:ABCDE";
byte[] textBytes = msg.getBytes();
//将字节数组封装到一个NdefRecord实例中去
NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT, new byte[] {}, textBytes);
//新建NdefRecord数组,本例中数组只有一个元素
NdefRecord[] records2 = {textRecord};
//新建一个NdefMessage实例
NdefMessage message = new NdefMessage(records2);

Ndef ndef2 = Ndef.get(tag);
// 打开连接
ndef2.connect();
// 写入NDEF信息
ndef2.writeNdefMessage(message);
// 关闭连接
ndef2.close();
Ndef ndef = Ndef.get(tag);
NdefMessage ndefMessage = ndef.getCachedNdefMessage();
NdefRecord[] records = ndefMessage.getRecords();
if (records == null || records.length == 0) {
KLog.e("NDEF record not found");
return;
}
NdefRecord record = records[0];
final String textType = "text/plain";
if (!record.toMimeType().equals(textType)) {
Log.e("NDEF record is not " + textType);
return;
}
if (mMessageListener == null) {
return;
}
byte[] payload = record.getPayload();
byte length = payload[0];
int start = 1 + length;
mMessageListener
.onMessage(new String(Arrays.copyOfRange(payload, start, payload.length)));
} catch (Exception e) {
Log.e(e);
}
}
public interface MessageListener {
void onMessage(String message);
}

}
/////////////////////////////////

NFCSActivity

onResume(){

closeToNfc()

}

public void closeToNfc() {
if (!NfcManager.testSupportNfc(mContext)) {
return;
}
final NfcManager manager = NfcManager.get(mContext);
if (manager == null) {
return;
}
final DataWrapper<AlertDialog> dataWrapper = new DataWrapper<>();
final NfcManager.MessageListener listener = new NfcManager.MessageListener() {
@Override
public void onMessage(final String message) {
Message msg=new Message();
msg.what=1;
msg.obj=message;
handler.sendMessage(msg);

}
};
manager.enable(mContext, listener);

}
///////////////////////////////
LinearLayout rootlayout = new LinearLayout(mContext);
rootlayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
UnitUtils.dip2px(mContext, 48)));
rootlayout.setOrientation(LinearLayout.HORIZONTAL);
TextView text_Name = new TextView(mContext);
LinearLayout.LayoutParams text_Name_Params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
text_Name.setLayoutParams(text_Name_Params);
text_Name.setId(View.generateViewId());
text_Name.setText(R.string.activity_nfc_id);
rootlayout.addView(text_Name);

EditText et_name = new EditText(mContext);
LinearLayout.LayoutParams et_Name_Params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
et_name.setLayoutParams(et_Name_Params);
et_name.setId(View.generateViewId());
et_name.setMaxLines(1);
if(msg.obj!=null){
et_name.setText(msg.obj.toString());
mNFCs.add(msg.obj.toString());
}
et_name.setSelection(et_name.getText().length());
rootlayout.addView(et_name);
linear.addView(rootlayout);

}

}
};

NFC读写电子便签总结的更多相关文章

  1. Android再学习-便签开发小结-20141119

    这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...

  2. Android自动化测试 - MonkeyRunner(二) 锤子便签测试脚本

    来源于:http://testerhome.com/topics/878 # encoding=utf-8 #导入python中自带的time模块和sys模块,脚本中都要用到它们. import ti ...

  3. 20151217JS便签

    JS便签: 根据一个数值来改变Repeater行数的颜色 <script type="text/javascript"> var query = document.ge ...

  4. win7桌面便签。自带的

    新建WIN7下的桌面便签小程序 桌面—>新建 快捷方式-> 输入%windir%\system32\StikyNot.exe

  5. ios UIWebView截获html并修改便签内容(转载)

    ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...

  6. localStorage 便签功能实现

    之前利用localStorage写过手机便签应用,因为蛋疼的换了台三星的屌丝级手机,木 有了测试的工具,没能继续优化维护下去.而在网页上实现便签功能目前来说似乎没有太大 的意义,因为不论是 Firef ...

  7. Win8启用便签

    启动或显示 Sticky Notes : Win+R--->StikyNot.exe 备份Sticky Notes保存位置 : %AppData%\Microsoft\Sticky Notes\ ...

  8. 修复Windows7的便签问题

    工作的时候,喜欢利用Windows的附件“便签”,将自己要做的事情一一列在上面,显示在桌面上, 今天突然发现便签损坏,系统是元数据损坏,后来在网上查到解决方法,特此记录: 1. 以管理员身份运行 cm ...

  9. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

    如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...

随机推荐

  1. Linux操作系统配置Go语言编程环境

    之前一直在windows下写Go,现在工作环境切换至Linux下,因此写下此文,记录安装Go环境的过程. 操作系统:CentOS7.5 一.安装步骤 1,下载Go语言安装包 yum install g ...

  2. 最新最全的Java面试题整理(内附答案)

    Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发, ...

  3. Linux下 编译lib3ds库

    从网上下载的一个QT程序链接需要用到lib3ds.a静态库. lib3ds is an overall software library for managing 3D-Studio Release ...

  4. 如何查看github排行热度

    github热门趋势 https://github.com/trending github star排行榜 github输入:star:>数字,来查看star数的仓库: 输入:location: ...

  5. MyCat(一) - 初体验

    前提: 1.安装JDK 2.安装MySQL 3.搭建了MySQL主从 1.下载MyCat,官网:http://www.mycat.io/ wget http://dl.mycat.io/1.6-REL ...

  6. RTX任务管理

        默认情况下用户创建的任务栈大小是由参数Task stack size决定的.     如果觉得每个任务都分配同样大小的栈空间不方便的话,可以采用自定义任务栈的方式创建任务.采用自定义方式更灵活 ...

  7. [Ubuntu] Git可视化比较工具 P4Merge 的安装/配置及使用

    1 下载 下载地址. 链接到上面的下载页后,先找到左边导航的 Clients ,如下图 1 所示. 接着找到 P4Merge: Visual Merge Tool , 如下图 2 所示. 最后,选择好 ...

  8. python数据分析及展示(三)

    一.Pandas库入门 1. Pandas库的介绍 http://pandas.pydata.org Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas ...

  9. mongodb配置、启动、备份

    Mongodb: 启动: /usr/bin/mongod --config /data/mydata/mongodb/mongodb.conf 停止Mongodb: 方法一:$ mongod --sh ...

  10. ssh: connect to host xx.xx.xxx.xxx port 22: Connection refused

    执行 ssh root@47.94.142.215 报错 首先要开启ssh 系统偏好设置-共享 选上远程登陆 选上远程管理 检测openssh-server是否安装成功 ,安装成功的如下 ps -e ...