弄懂一个东西,必须知根知底,需知其然,知其所以然。

字面理解

NFC全称:Near Field Communication(近距离无线通讯技术)。因此它的使用条件仅限于近场感应,终端与标签感应距离超出限制将会导致无法使用。

应用场所

现在的公交卡信息读取、充值,SmartTag等都是对NFC的应用。目前在Android开发都是用手机去感应NFCTag,显示NFCTag承载的信息或者写入新的内容,当然有的只是获取NFCTag中的ID。

前提条件硬件支持:Android手机硬件支持(一般NFC开关在设置里面)

权限申请:

android:required="true"/>

开始Android手机感应后,系统会发出标签调度系统,一般有三种Intent对象,由高到低为:

ACTION_NDEF_DISCOVERED(启动包含NDEF负载和已知类型的标签的Action类)

ACTION_TECH_DISCOVERED(已知类型的标签的Action类,没有包含NDEF)

ACTION_TAB_DISCOVERED

截图1

过程处理

在APP配置文件中对应的Activity筛选对应的Aciton。比如笔者的应用

截图2

其中非常关键的一个文件:android:resource="@xml/nfc_tech_filter"。这里面配置了NFCTagActivity响应的Tech-List。此配置错误的话Activity将不做任何响应。

截图3:/res/xml/nfc_tech_fiter.xml

再不知道的自己的NFCTag标签类型情况下,开发者可以用这个全类型,弊端是你的APP会响应其他NFCTag,怎么避免这个问题呢?我们可以在开发中测试出自己的NFCTag具体是什么标签类型,先把全类型标签应用到你的APP中,然后Intent获取,打印自己的TechList,最后修改自己的xml,只响应自己的标签类型。代码如下:Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

String[ ] techList=tag.getTechList();

for(String tech:techList) {

Log.d("Tech",tech);

}

NFCTagActivity部分代码;

截图4

问题总结

1.为什么选择用ACTION_TECH_DISCOVERED?应用更广泛,感应的NFC功能齐全,足以适应当前市场上的NFCTag,且NDEF只能用于NDEF文本格式标签。反编译支付宝,微信能发现用的都是ACTION_TECH_DISCOVERED。

2.如何做到只能让自己应用感应识别自己的标签?因为很多应用用的都是全类型标签文配置,在Android手机感应NFCTag后,Android系统会弹出选择框让用户选择哪个应用来响应此标签,所以在后台运行时我们无法做到这点,只有应用运行在前台时,我们才能做到只让本应用感应,代码如下:

截图5

3.如何在代码中提示用户,手机不支持NFC功能或者NFC未打开?

截图5

android nfc开发 简书,Android-NFC基础相关推荐

  1. android自动登录简书,Android开发之简单登录界面

    用户界面基础 Android系统的四大组件分别是活动(Activity).服务(Service).广播接收器(Broadcast Receiver).内容提供器(Content Provider). ...

  2. android 读写文件 简书,Android 中的文件操作

    Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...

  3. android物联网开发简书,Arduino物联网开发实例教程

    ## blinker解决方案 blinker是一套跨硬件.跨平台的物联网解决方案,提供APP端.设备端.服务器端支持,使用公有云服务进行数据传输.可用于智能家居.数据监测等领域,可以帮助用户更好更快地 ...

  4. android四大组件 简书,android四大组件

    android有四大组件,分别是Activity, Service(服务),Content Provider(内容提供者),BoadcastReceiver广播接收器. Activity 一个Acti ...

  5. android波浪动画简书,Android贝塞尔曲线————波浪效果(大波浪)

    Hello大家好,很高兴又一次与大家见面,今天是农历丁酉鸡年(大年初四),现在跟大家拜年有点晚,算是拜晚年,祝大家晚年幸福. 这么快大伙都到了晚年了,Android贝塞尔曲线我也准备以一个大波浪来结束 ...

  6. android 截屏 简书,Android 内置应用截屏方法

    Android 中,内置应用如何更好的截屏 在开发系统应用的时候,有时候需要用到截屏,因为 View.getDrawingCache() 截不到状态栏,所以这个方案不理想 这有一个更好的方案,就是用 ...

  7. android自动登录简书,Android 自动登录——持久化Cookie

    背景 在使用鸿洋大神的玩Android网站开放的api开发android app时,使用Retrofit请求登录api,需要保存Cookie以备其他需要登陆后才能操作的api使用. 自定义拦截器实现持 ...

  8. android运行过程简书,Android系统的启动流程

    Android系统有哪些进程 在Linux系统启动时,会读取init.rc,里面配置了一些需要启动的进程.注意:SystemServer进程不在init.rc里,因为SystemServer进程是由z ...

  9. android 辅助服务 简书,Android AccessibilityService使用

    测试demo主要使用了Android 的无障碍辅助服务(AccessibilityService),主要注意是 1. 开启服务,绑定目标app的监听(demo中根据包命绑定了体积计算的app),需要在 ...

最新文章

  1. activiti入门2流程引擎API和服务基础设施
  2. 对某机构为“转移内部矛盾”而嫁祸于我们的事件之真相大起底
  3. mysql授权远程访问
  4. linux下mysql主从不同步
  5. linux备份根目录与还原脚本,Shell脚本备份和还原MBR(主引导记录)
  6. java权限管理与用户角色权限设计
  7. 国内先进的光电转换器件设计和单光子检测成像技术 1DTof 3DTof 激光测距传感器
  8. 程序员坐牢了,会被安排去写代码吗?
  9. Web前端开发(一)--html基本结构,基本标签
  10. php 表情,php emoji表情处理
  11. 《进击的虫师》爬取豆瓣电影海报Top250(2020年10月23日更新)
  12. 阿布扎比有一个“智慧港口”
  13. 华为首部鸿蒙,华为首部鸿蒙手机P50来了!顶级拍照再升级,麒麟芯片或绝唱
  14. ROSGazebo自定义多旋翼无人机仿真——环境搭建和模型建立
  15. mysql计算三角形斜边_MySQL 5.7新特性之Generated Column(函数索引)
  16. django orm原理_django 动态创建一个模型的多个table name, 并通过 Django ORM 操作
  17. 项目设计Andriod部分-做一个学习类App-1
  18. 求生之路服务器未响应,求生之路2玩起来速度快,但是过几秒后,就卡住显示未响应,这是为什么...
  19. windows +linux(ubuntu) 2020.7 双系统最新安装心得
  20. NOIP 2011 聪明的质检员

热门文章

  1. 哪些期货公司开户手续费更低?
  2. 一分钟拍手游戏规则_我如何分析一百万篇中型文章,以了解获得多少拍手好故事...
  3. 上海科技大学和南方科技大学计算机,你相信吗?这几所大学,20年后不比北大清华差...
  4. 使用IDEA从零开始新建一个springboot项目
  5. 基于数字神经系统的绩效考核
  6. django+haystack+ElasticsearchSearch
  7. 服务器部署系统启动失败,安装程序配置服务器失败Microsoft SQL Server Desktop Engine...
  8. 解忧杂货店(博客系统)的项目测试——黑盒测试
  9. 数据恢复顾问(DRA)
  10. 绝地求生服务器在线人数,《绝地求生:大逃杀》同时在线人数突破165万 官方就服务器问题向玩家致歉...