博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NFC近场通信02----读写卡的准备工作
阅读量:6682 次
发布时间:2019-06-25

本文共 3039 字,大约阅读时间需要 10 分钟。

                      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中例如以下配置:

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来查询该卡的一些具体信息和数据。

转载地址:http://wexao.baihongyu.com/

你可能感兴趣的文章
centos 5 安装教程注意事项
查看>>
回顾2014,展望2015
查看>>
BIOS基础知识(下)
查看>>
nmom结果记录
查看>>
Iterator 和 Iterable 区别和联系
查看>>
经典SQL语句大全
查看>>
测试LCD1602的显示,显示时间,提示语
查看>>
Linux常用命令
查看>>
Windows系统一键备份还原工具,支持UEFI和Legacy模式
查看>>
MySQL对分隔符的处理(二)
查看>>
centos 6.3 源码安装mysql
查看>>
SecureCRT 连接Ubuntu乱码解决
查看>>
Zabbix
查看>>
Linux运维学习历程-第十二天-bash脚本与程序包管理
查看>>
Restorator V2009 单文件版
查看>>
Zabbix man手册
查看>>
APUE读书笔记-09进程关系(02)
查看>>
来南京工作两个月了!
查看>>
EDM邮件营销的七个基本原则
查看>>
dropna(thresh=n) 的用法
查看>>