NFC读写电子便签总结
编写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读写电子便签总结的更多相关文章
- Android再学习-便签开发小结-20141119
这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...
- Android自动化测试 - MonkeyRunner(二) 锤子便签测试脚本
来源于:http://testerhome.com/topics/878 # encoding=utf-8 #导入python中自带的time模块和sys模块,脚本中都要用到它们. import ti ...
- 20151217JS便签
JS便签: 根据一个数值来改变Repeater行数的颜色 <script type="text/javascript"> var query = document.ge ...
- win7桌面便签。自带的
新建WIN7下的桌面便签小程序 桌面—>新建 快捷方式-> 输入%windir%\system32\StikyNot.exe
- ios UIWebView截获html并修改便签内容(转载)
ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...
- localStorage 便签功能实现
之前利用localStorage写过手机便签应用,因为蛋疼的换了台三星的屌丝级手机,木 有了测试的工具,没能继续优化维护下去.而在网页上实现便签功能目前来说似乎没有太大 的意义,因为不论是 Firef ...
- Win8启用便签
启动或显示 Sticky Notes : Win+R--->StikyNot.exe 备份Sticky Notes保存位置 : %AppData%\Microsoft\Sticky Notes\ ...
- 修复Windows7的便签问题
工作的时候,喜欢利用Windows的附件“便签”,将自己要做的事情一一列在上面,显示在桌面上, 今天突然发现便签损坏,系统是元数据损坏,后来在网上查到解决方法,特此记录: 1. 以管理员身份运行 cm ...
- android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...
随机推荐
- 关于Unity中物体分别在本地和世界坐标系对应方向的移动
方向 Vector3可以定义以世界坐标轴为参考的三维矢量,Vector3.forward,Vector3.up,Vector3.right方别对应物体世界坐标系的Z,Y,X轴方向的单位向量,或者叫三维 ...
- win10 安装node.js node.js 安装成功但npm -v 报错问题解决
错误症状官网下载node-v8 .node-v10 的msi 安装进行安装. npm -v 错误如下 0 info it worked if it ends with ok 1 verbose cli ...
- POI导出复杂的excel;excel公共样式类;excel拼接定制类;数据科学计数法转为普通值
一.excel公共样式类(包含数据科学计数法转为普通值) package com.thinkgem.jeesite.common.utils.excel; import org.apache.poi. ...
- POI导出Excel发现不可读取的内容
环境说明:MyEclipse Tomcat7.0 通过后台查询数据,导出Excel在打开时会出现以下提示: 点击否,则不显示任何内容,点击是,弹出 查看修改记录为: 通过WPS打开不会出现任何提示,可 ...
- window alias给cmd命令起别名
场景: Linux的alias命令是个非常实用的工具,任何命令通过alias可以精简到很短,比如:alias l='ls -l' Windows也有alias类似的命令,就是:doskey,开启方法也 ...
- C# 客户端篇之实现Restful Client开发(RestSharp帮助类)
上篇文章<C# 服务端篇之实现RestFul Service开发(简单实用)>讲解到,如果开发一个简单的Restful风格的Service,也提到了简单创建一个Restful Client ...
- [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 使用Lifecycle管理Tomcat中组件的生命周期
大型软件和汽车制造工厂一样,组件繁多,关系复杂,相互协同完成了汽车的生产过程.软件中的Object就像是工厂中component一样. 下面来看看相关的类和接口: abstract class Lif ...
- APK使用APKTOOL命令行进行解包和重新打包
在刚开始安卓逆向时遇到了一个很坑爹的问题,就是对apk进行反编译后不能重新打包, 查了一些资料,这里就简单说一下用apktool进行解包和打包的整个过程. 首先把一个apk和apktool放到同一目录 ...
- Ubuntu16.04 本地提权漏洞复测过程
一.漏洞概述 Ubuntu 16.04 版本且unprivileged_bpf_disable 权限没有关闭的情况下就会存在 提权漏洞查看方式:1,cat /proc/version 查看系统版本 2 ...