Android NFC近场通信02----读写卡的准备工作
Android NFC近场通信02----读写卡的准备工作
因为公司接了一个听上去感觉比較NB的项目。给某油田做派工系统 。并由小女子负责Androidclient的开发工作~~开发时的Android设备看上去是比較高大上哈,防爆的,事实上非常多次同事们都想开玩笑的说试试摔地上,都防爆嘛。那肯定摔不坏的哈~~开发过程中须要用到NFC技术。所以就在网上学习并整理了一下关于Android
nfc相关的知识~好了,切入主题。本文写读写卡前的准备工作:
ps:这一系列有部分为网上整理所得。感谢感谢~~当然还包括小女子的部分代码~~~
NFC是一套短距离的无线通信,通常距离是4厘米或更短。
NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s. NFC总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场能够给被动目标供电。这些被动的目标包含不须要电源的标签。卡,也能够是有电源的设备。
与其它无线通信技术比較, 比如蓝牙和WiFi。 NFC提供更低贷款和距离,而且低成本,不须要供电,不须要实现匹配,整个通信过程不过短短的靠近一秒就能完毕。
一个带有NFC支持的android设备一般是一个发起者。
也能够作为NFC的读写设备。
他将检測NFC tags而且打开一个Activity来处理. Android 2.3.3还有支持有限的P2P。
Tags分非常多种,当中简单的仅仅提供读写段,有的仅仅能读。复杂的tags能够支持一些运算。加密来控制对tags里数据段的读写。甚至一些tags上有简单的操作系统,同意一些复杂的交互和能够运行一些代码。
本文的代码样例是基于API10的。
要在Android手机中使用NFC。必须在AndroidManifest.xml中例如以下配置:
<uses-feature android:name="android.hardware.nfc"
android:required="true" />
<uses-permission android:name="android.permission.NFC" />
Tag公布系统
当android设备扫描到一个NFC tag,通用的行为是自己主动找最合适的Activity会处理这个tag Intent而不须要用户来选择哪个Activity来处理。
由于设备扫描NFC tags是在非常短的范围和时间,假设让用户选择的话,那就有可能须要移动设备,这样将会打断这个扫描过程。你应该开发你仅仅处理须要处理的tags的Activity,以防止让用户选择使用哪个Activity来处理的情况。Android提供两个系统来帮助你正确的识别一个NFC tag是否是你的Activity想要处理的:Intent公布系统和前台Activity公布系统。
Intent公布系统检查全部Activities的intent filters,找出那些定义了能够处理此tag的Activity,假设有多个Activity都配置了处理同一个tag Intent。那么将使用Activity选择器来让用户选择使用哪个Activity。
用户选择之后。将使用选择的Activity来处理此Intent.
前台公布系统同意一个Activity覆盖掉Intent公布系统而首先处理此tag Intent。这要求你将要处理Tag Intent的Activity执行在前台,这样当一个NFC tag被扫描到,系统先检測前台的Activity是否支持处理此Intent,假设支持,即将此Intent传给此Activity,假设不支持。则转到Intent公布系统。
曾经台前台公布系统为例,须要编写例如以下代码:
1. 定义变量
private NfcAdapter mAdapter;
private String[][] techList;
private IntentFilter[] intentFilters;
private PendingIntent pendingIntent;
private Tag tag;
2. 加入下列代码到Activity的onCreate() 方法里:
//获取nfc适配器
mAdapter = NfcAdapter.getDefaultAdapter(this);
//定义程序能够兼容的nfc协议,样例为nfca和nfcv
//在Intent filters里声明你想要处理的Intent,一个tag被检測到时先检查前台公布系统,
//假设前台Activity符合Intent filter的要求,那么前台的Activity的将处理此Intent。
//假设不符合,前台公布系统将Intent转到Intent公布系统。假设指定了null的Intent filters。
//当随意tag被检測到时,你将收到TAG_DISCOVERED intent。 因此请注意你应该仅仅处理你想要的Intent。
techList = new String[][] {
new String[] { android.nfc.tech.NfcV.class.getName() },
new String[] { android.nfc.tech.NfcA.class.getName() } };
intentFilters = new IntentFilter[] { new IntentFilter(
NfcAdapter.ACTION_TECH_DISCOVERED), };
//创建一个 PendingIntent 对象, 这样Android系统就能在一个tag被检測到时定位到这个对象
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
3. 在onNewIntent方法中:
public void onNewIntent(Intent intent) {
tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); return;
}
4. 在OnPause方法中:
@Override
protected void onPause() {
super.onPause();
mAdapter.disableForegroundDispatch(this);
}
4. 在OnResume方法中:
@Override
protected void onResume() {
super.onResume();
//使用前台公布系统
mAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters,
techList);
}
}
定义了这些方法以后,执行程序,在不锁屏的情况下,使用NFCV或NFCA的NFC卡靠近的手机的时候OnNewIntent就会被触发。Tag就能够被获取到,能够使用获取到的TAG来查询该卡的一些具体信息和数据。
Android NFC近场通信02----读写卡的准备工作的更多相关文章
- Android NFC近场通信03----读写MifareClassic卡
Android NFC近场通信02----读写MifareClassic卡 一.MifareClassic卡 相关 一般来 ...
- Android NFC近场通信1——NFC概述
最近对NFC挺感兴趣,而且新换的手机也支持NFC功能(最近换了Find5,感觉还不错O(∩_∩)O),所以打算学学NFC编程.NFC就是我们经常说的近场通信.通常距离是4厘米或更短.NFC工作频率是1 ...
- Android NFC近场通信2——NFC标签调度
上面一篇文章简单介绍了NFC的背景和技术应用,今天主要是讲解一下NFC如何发起通信和标签通信(主要是翻译android官网的资料,中间加入个人心得). NFC总是在一个发起者和一个被动目标之间发生.发 ...
- nfc近场通信
NFC简介: Near Field Communication 近场通信,是一种数据传输技术. 与wifi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm. NFC支持3种工作 ...
- NFC:Arduino、Android与PhoneGap近场通信
NFC:Arduino.Android与PhoneGap近场通信(第一本全面讲解NFC应用开发的技术著作移动智能设备近距离通信编程实战入门) [美]Tom Igoe(汤姆.伊戈),Don Colema ...
- Android近场通信---NFC基础转)
Android近场通信---NFC基础(一)(转) 本文介绍在Android系通过你所能执行的基本任务。它解释了如何用NDEF消息格式来发送和接收NFC数据,并且介绍了支持这些功能的Android框架 ...
- Android近场通信---高级NFC(二)
读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在直接使用NFC标签工作时,你依然能够读写NDE ...
- Android近场通信---NFC基础(五)(转)
转自 http://blog.csdn.net/think_soft/article/details/8190463 Android应用程序记录(Android Application Record- ...
- Android近场通信---NFC基础(一)(转)
转自 http://blog.csdn.net/think_soft/article/details/8169483 本文译自:http://developer.android.com/guide/t ...
随机推荐
- 【整理】iview中刷新页面的时候更新导航菜单的active-name
iview中刷新页面的时候更新导航菜单的active-name https://blog.csdn.net/lhjuejiang/article/details/83212070
- java web开发中常用的协议的使用和java-web 常见的缓冲技术
一.DNS协议 作用将域名解析为IP 类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...
- QT_7_资源文件_对话框_QMessageBox_界面布局_常用控件
资源文件 1.1. 将资源导入到项目下 1.2. 添加文件—>Qt -->Qt Resource File 1.3. 起名称 res ,生成res.qrc文件 1.4. 右键 open i ...
- 智能指针unqiue_ptr
unique_ptr unique_ptr 对它指向的对象在同一时刻是独占的.它要么在构造的时候使用内置指针初始化,要么使用reset给其赋值.当unique_ptr被销毁时,它所指向的对象也被销毁. ...
- dotTrace激活服务器
http://active.09l.me IntelliJ IDEA 7.0 或 更高DataGrip 1.0或更高ReSharper 3.1 或更高ReSharper Cpp 1.0 或更高dotT ...
- python解决鸡兔同笼问题
# 这个问题,是我国古代著名趣题之一. # 大约在1500年前,<孙子算经>中就记载了这个有趣的问题. # 书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足, # 问雉兔各几何 ...
- java 自动拆箱 自动装箱
自动装箱的定义就是 基本数据类型赋值给包装类型, 拆箱则相反. Integer integer = 122; // 自动装箱 int num = integer; //自动拆箱 想看一下源码是怎么 ...
- 关于Python中包裹传参和解包裹的理解
1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹位置传参和包裹关键字传参.先看包裹位置传参: 在这 ...
- 如何查看Laravel版本号的三种方法
1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3:可 ...
- MySQL 慢查询优化
为什么查询速度会慢 1.慢是指一个查询的响应时间长.一个查询的过程: 客户端发送一条查询给服务器 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果.否则进入下一个阶段 服务器端进行 ...