Android NFC近场通信02----读写卡的准备工作

                    Android NFC近场通信02----读写卡的准备工作

     由于公司接了一个听上去感觉比较NB的项目,给某油田做派工系统 。并由小女子负责Android客户端的开发工作~~开发时的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----读写卡的准备工作,布布扣,bubuko.com

时间: 2024-08-06 03:44:17

Android NFC近场通信02----读写卡的准备工作的相关文章

Android NFC近场通信03----读写MifareClassic卡

                                       Android NFC近场通信02----读写MifareClassic卡 一.MifareClassic卡 相关 一般来说,给予MifareClassic的射频卡,一般内存大小有3种: 1K: 16个分区(sector),每个分区4个块(block),每个块(block) 16个byte数据 2K: 32个分区,每个分区4个块(block),每个块(block) 16个byte数据 4K:64个分区,每个分区4个块(

NFC:Arduino、Android与PhoneGap近场通信

NFC:Arduino.Android与PhoneGap近场通信(第一本全面讲解NFC应用开发的技术著作移动智能设备近距离通信编程实战入门) [美]Tom Igoe(汤姆.伊戈),Don Coleman(唐.科尔曼),Brian Jepson(布莱恩.杰普森) 著   金建刚 冯依 姚尚朗 译 ISBN 978-7-121-23997-7 2014年9月出版 定价:65.00元 244页 16开 编辑推荐 欢迎进入近场通信(NFC)的世界,这种飞速发展的新技术能通过无线信号在靠近的电子设备间进行

Android近场通信---高级NFC(二)

读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在直接使用NFC标签工作时,你依然能够读写NDEF数据.这是你想要如何构建的事情.下例演示了如何使用MIFARE超薄标签来工作: package com.example.android.nfc; import android.nfc.Tag; import android.nfc.tech.MifareUltralight; import and

Android近场通信---NFC基础(五)(转)

转自 http://blog.csdn.net/think_soft/article/details/8190463 Android应用程序记录(Android Application Record---AAR) 在Android4.0(API Level 14)中引入的Android应用程序记录(AAR),提供了较强的在扫描到NFC标签时,启动应用程序的确定性.AAR有嵌入到NDEF记录内部的应用程序的包名.你能够把一个AAR添加到你的NDEF消息的任何记录中,因为Android会针对AAR来

Android近场通信---NFC基础(一)(转)

转自 http://blog.csdn.net/think_soft/article/details/8169483 本文译自:http://developer.android.com/guide/topics/connectivity/nfc/nfc.html 本文介绍在Android系通过你所能执行的基本任务?它解释了如何用NDEF消息格式来发送和接收NFC数据,并且介绍了支持这些功能的Android框架API?有关更高级的话题,包括对非NDEF格式数据的讨论,情况“高级 NFC” NDEF

Android近场通信---NFC基础(三)(转)

转自 http://blog.csdn.net/think_soft/article/details/8180203 过滤NFC的Intent 要在你想要处理被扫描到的NFC标签时启动你的应用程序,可以在你的应用程序的Android清单中针对一种.两种或全部三种类型的NFC的Intent来过滤.但是,通常想要在应用程序启动时控制最常用的ACTION_NDEF_DISCOVERED类型的Intent.在没有过滤ACTION_NDEF_DISCOVERED类型的Intent的应用程序,或数据负载不是

Android近场通信---NFC基础(四)(转)

转自http://blog.csdn.net/think_soft/article/details/8184539 从Intent中获取信息 如果因为NFC的Intent而启动一个Activity,那么你就能够从Intent中获取被扫描到的NFC标签的相关信息.根据被扫描到的标签,Intent对象能够以下额外的信息: 1.  EXTRA_TAG(必须的):它是一个代表了被扫描到的标签的Tag对象: 2.  EXTRA_NDEF_MESSAGES(可选):它是一个解析来自标签中的NDEF消息的数组

android NFC通信初探一

大家好,经历了3个月的沉寂,我又重新走上了编码的道路上了.这次稍微了解了下android NFC,在这里和大家分享下我所学到的东西.希望和大家一起交流,互相学习,MY QQ IS 1339266784. 一.NFC简介 NFC[1]是Near Field Communication缩写,即近距离无线通讯技术.由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,具有成本低廉.方便易用和更富直观性等特点.可以在移动设备.消费类电子产品.PC 和智能控件工具间进行近距离无线通信.NFC

android NFC 程序设计

NFC简介 NFC是Near Field Communication缩写,即近距离无线通讯技术.由飞利浦公司和索尼公司共同开发的NFC是一种非 接触式识别和互联技术,可以在移动设备.消费类电子产品. PC 和智能控件工具间进行近距离无线通信. 13.56MHz频率运行于20厘米距离内.其传输速度有106 Kbit/秒.212 Kbit/秒或者424 Kbit/秒三种.目前近场通信已通 过成为ISO/IEC IS 18092国际标准.ECMA-340标准与ETSI TS 102 190标准.NFC