这里写自定义目录标题

  • 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权限,文件内容如下:

                                                                                                                                                                     

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

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集合中支持的技术,如下所示:

            android.nfc.tech.IsoDep        android.nfc.tech.NfcA        android.nfc.tech.NfcB        android.nfc.tech.NfcF        android.nfc.tech.NfcV        android.nfc.tech.Ndef        android.nfc.tech.NdefFormatable        android.nfc.tech.MifareClassic        android.nfc.tech.MifareUltralight    

在主界面方法里判断手机是否具有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标签就会执行此Intent         mPendingIntent=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.

更多相关文章

  1. android xml布局之———include.merge.ViewStub
  2. Android(安卓)根据系统声音模式设置提醒方式
  3. Android(安卓)切换卡(TabWidget)
  4. 收集整理 View必须要了解的Android坐标知识
  5. Android(安卓)使用意图播放本地视频
  6. Android动态修改APP图标
  7. Android(安卓)外观模式
  8. 腾讯微博java(android) sdk 标签相关api详细介绍
  9. Android(安卓)- Activity的启动模式

随机推荐

  1. Ubuntu10.04下Android源码编译
  2. 使用nginx在android手机上搭建rtmp服务器
  3. 介绍几个我常用的小工具
  4. 推荐:Android(安卓)网络通信框架Volley简
  5. ActivityGroup(和TabHost一样的功能)
  6. 第一个Google Map 应用
  7. Effective Android(安卓)UI - MVP
  8. 关于Android中Java与Javascript之间的传
  9. 如何让Android模拟器的Browser可以浏览In
  10. Android开源项目汇总