这里写自定义目录标题

  • Android的NFC读写(一)
    • NFC简介
    • 代码解析
    • 源码(Demo)

Android的NFC读写(一)

近来,因需求需要开发nfc读写功能,网上查阅了许多资料,发现相关方面资料鱼龙混杂,许多demo甚至无法跑起来,于是无奈只能硬啃官方文档,终于颇有感悟,demo见末尾
nfc相关资料,大家可以参考以下几个网站,里面讲的非常透彻。
https://developer.android.com/guide/topics/connectivity/nfc
https://developer.android.com/guide/topics/connectivity/nfc/nfc.html
https://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html

NFC简介

这里简单的介绍一下nfc,近场通信(NFC)是一组短距离无线技术,通常需要4cm或更短的距离才能启动连接。NFC允许您在NFC标签和Android设备之间或两个Android设备之间共享小的数据有效负载。在Android中,我们通常会遇到三种操作模式:

  • 读/写模式,允许NFC设备读取和/或写入被动NFC标签和贴纸。
  • P2P模式,允许NFC设备与其他NFC对等体交换数据; Android Beam使用此操作模式。
  • 卡仿真模式,允许NFC设备本身充当NFC卡。然后,可以通过外部NFC读取器(例如NFC销售点终端)访问模拟的NFC卡。
    本文实现了nfc标签NDEF和ultralight两种格式的读取效果

代码解析

首先先配置android权限,文件内容如下:

 <!--配置过滤器--><intent-filter><action android:name="android.nfc.action.NDEF_DISCOVERED"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="text/plain"/></intent-filter><intent-filter ><action android:name="android.nfc.action.TECH_DISCOVERED"/></intent-filter><intent-filter><action android:name="android.nfc.action.TAG_DISCOVERED"/></intent-filter><meta-data android:name="android.nfc.action.TECH_DISCOVERED"android:resource="@xml/nfc_tech_filter"/>

标签调度系统的基本工作方式如下:

1.尝试以解析NFC标记(ACTION_NDEF_DISCOVERED或其中一个ACTION_TECH_DISCOVERED)时标记调度系统创建的意图启动一个Activity 。
2.如果没有活动过滤该意图,请尝试启动具有下一个最低优先级意图的活动(ACTION_TECH_DISCOVERED或者ACTION_TAG_DISCOVERED),直到应用程序筛选意图或标记分派系统尝试所有可能的意图。
3.如果没有应用程序筛选任何意图,请不执行任何操作。
大家可以参考这张图

然后将Activity启动模式设置为singleTop,在这种模式下,如果Activity已经在任务栈的栈顶了,当再次启动同一个Activity的时候,这个Activity不会被重新创建,而且它的onNewIntent()方法会被调用,但是它的onCreate()、onStart()方法不会被调用。
#####新建xml文件夹,新建nfc_tech文件(自定义):
该文件指定您的活动在tech-list集合中支持的技术,如下所示:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><tech-list><tech>android.nfc.tech.IsoDep</tech><tech>android.nfc.tech.NfcA</tech><tech>android.nfc.tech.NfcB</tech><tech>android.nfc.tech.NfcF</tech><tech>android.nfc.tech.NfcV</tech><tech>android.nfc.tech.Ndef</tech><tech>android.nfc.tech.NdefFormatable</tech><tech>android.nfc.tech.MifareClassic</tech><tech>android.nfc.tech.MifareUltralight</tech></tech-list>
</resources>

在主界面方法里判断手机是否具有nfc功能,如下所示:

      if (mNfcAdapter == null) {Toast.makeText(this, "该设备不支持nfc", Toast.LENGTH_SHORT).show();finish();return;}if (!mNfcAdapter.isEnabled()) {Toast.makeText(this, "请打开nfc开关", Toast.LENGTH_SHORT).show();Intent intent=new Intent(Settings.ACTION_NFC_SETTINGS);startActivity(intent);}//创建PendingIntent对象,当检查到一个tag标签就会执行此IntentmPendingIntent=PendingIntent.getActivity(this,0,new Intent(this,getClass()),0);

在onNewIntent方法中取出获取到的标签,并进入读取标签的方法:

     Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);String techList[] = tag.getTechList();for (String tech : techList) {System.out.print(tech);}readNdeftag(tag);

自定义读取标签的方法:这里目前只做了NDEF格式的读取:

 Ndef ndef = Ndef.get(tag);try {ndef.connect();NdefMessage ndefMessage = ndef.getNdefMessage();if (ndefMessage != null) {mReadText.setText(parseTextRecord(ndefMessage.getRecords()[0]));Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show();}else {mReadText.setText("该标签为空标签");}

源码(Demo)

最后Demo已经上传,欢迎大家交流下载,不足之处,还望请教。

链接: https://github.com/zcyyouminghuo/Android_NfcDemo.

Android基于nfc的读写(一)相关推荐

  1. Android开发——NFC标签读写

    Android开发----NFC标签读写 前言 最近因为项目需要,特意学习了NFC的Android开发.加上之前并没有系统地学习过Android开发知识,起手比较困难,搞了半天才算一知半解.怎么办呢? ...

  2. Android 基于libaums实现读写U盘文件

    前言 还是我实习的时候,遇到个要求说要支持 USB,当时找了很多博客,最后这篇文章帮我解决了问题,想想自己也没有其他要补充的,就转载一下吧! 这篇博客用的第三方库只支持 FAT32 格式的 U盘,如果 ...

  3. android——实现NFC的读写

    一.NFC是什么? 近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司).诺基亚和索尼共同研制开发,其基础是RFID及互连技术.近场通信(Near ...

  4. Android nfc模块读写MifareClassic卡50

     http://3y.uu456.com/bp_8mhvy4gizz721et5ih0i_1.html 一般来说,基于MifareClassic的射频卡:1K:16个分区(sector),每个分区 ...

  5. Android NFC 标签读写Demo与历史漏洞概述

    文章目录 前言 NFC基础 1.1 RFID区别 1.2 工作模式 1.3 日常应用 NFC标签 2.1 标签应用 2.2 应用实践 2.3 标签预览 2.4 前台调度 NFC开发 3.1 NDEF数 ...

  6. 基于nfc技术的android移动支付终端的设计与实现,基于Android的NFC移动应用平台的设计与实现...

    摘要: 近年来,NFC作为一种安全,快速,低功耗的近距离非接触无线通信技术,受到了广泛关注.然而,尽管Android操作系统上已经集成了NFC技术及相关协议,NFC在移动端的应用仍然未能普及,已有的应 ...

  7. Android开发NFC读写数据

    1.权限<uses-permission android:name="android.permission.NFC"/><uses-feature android ...

  8. Android手机nfc基础及ndef标准标签消息读写

    官方API: https://developer.android.google.cn/guide/topics/connectivity/nfc/nfc 基础概念,什么是nfc? Near Field ...

  9. Android针对IC卡读写的NFC开发

    菜鸟进场,方圆十里,寸草不生 这两天研究了NFC功能,网上查了很多的资料,不过感觉别人讲的都大同小异,但都缺了那么一点点火候,因为第一次接触有些概念是不清楚的,所以代码看上去很吃力,这个博客呢就是想整 ...

最新文章

  1. linux提升网络实时性,通过调整Linux内核参数提升网络性能
  2. kubernetes (k8s)的二进制部署单节点(etcd和flannel网络)
  3. 定时执行程序-Quartz简单实例
  4. [导入]ASP常用函数:getIMG()
  5. Spring AOP切入点与通知XML类型
  6. ios php mysql实例_php – 从iOS应用程序将图像存储到MYSQL数据库中
  7. 【转】CentOs中Apache开启rewrite模块详解
  8. java数组子类型_在vhdl中获取数组子类型的范围属性
  9. 纯前端控件集 WijmoJS 2018V2发布,提供可视化设计器,在React、Vue和Angular中的更易用...
  10. 分享10个创新的扁平风格的简历页面设计
  11. 无线充电主控芯片方案
  12. 致敬科比,JS手写贪吃蛇
  13. 单臂路由及链路聚合+实验配置(均使用思科模拟器Cisco Packet Tracer Student)
  14. C++输出透明背景字体
  15. (附源码)ssm智慧社区管理系统 毕业设计 101635
  16. linux 清除bios 密码吗,如何设置/清除 BIOS 硬盘密码
  17. python itchat实现微信自动回复
  18. 学Python兼职赚钱是真的吗
  19. Japanese(Shift-Jis)的编码范围
  20. Docker——Docker 容器数据卷(Volumes)

热门文章

  1. mle matlab,MLE的Matlab程序
  2. Java 导出数据库表信息生成Word文档
  3. 无人机背后的故事——宾夕法尼亚大学工程学院院长Vijay Kumar专访
  4. 关于报编程培训班的再一次思考
  5. 关于Tensorflow用于深度神经网络训练中的一些问题
  6. Android 查看Android版本的方法
  7. 选配高清监控设备(监控系统)交换机
  8. android 设置壁纸 代码,我如何在Android中使用代码设置壁纸?(How can I set Wallpaper in a...
  9. 查看电子元器件的丝印信息
  10. 【华人学者风采】裴健 加拿大西蒙弗雷泽大学