一、NFC是什么?

近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。

NFC通信模式主要有以下几种(信息来源):

1.读卡器模式(Reader/writer mode):

作为非接触读卡器使用,比如从海报或者展览信息电子标签上读取相关信息。亦可实现NFC手机之间的数据交换,对于企业环境的中的文件共享,或者对于多玩家的游戏应用,都将带来诸多的便利。

2. 点对点模式(P2Pmode):

此模式和红外线差不多,可用于数据交换,只是传输距离较短,传输创建速度较快,传输速度也快些,功耗低(蓝牙也类似)。将两个具备NFC功能的设备无线链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。因此通过NFC,多个设备如数位相机、PDA、计算机和手机之间都可以交换资料或者服务。

3.卡模式(Cardemulation):

这个模式其实就是相当于一张采用RFID技术的IC卡,可以替代大量的IC卡(包括信用卡)使用的场合,如商场刷卡、公交卡、门禁管制,车票,门票等等。此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的 RF 域来供电,即使寄主设备(如手机)没电也可以工作。

二、如何使用与集成到项目?

1、首先在manifests里面声明NFC和添加相应的权限;

<uses-feature  android:name="android.hardware.nfc"  android:required="true" />
<uses-permission android:name="android.permission.NFC" />

2、在Activity标签中声明识别NFC标签;

<activity android:name=".Activity.Main.NFCActivity">  <intent-filter>  <action android:name="android.nfc.action.TAG_DISCOVERED" />  <category android:name="android.intent.category.DEFAULT" />  <data android:mimeType="*/*" />  </intent-filter>
</activity>

3、封装NFC的读写,方便调用;

public class NfcUtils {  //nfc  public static NfcAdapter mNfcAdapter;  public static IntentFilter[] mIntentFilter = null;  public static PendingIntent mPendingIntent = null;  public static String[][] mTechList = null;  /** * 构造函数,用于初始化nfc*/  public NfcUtils(Activity activity) {  mNfcAdapter = NfcCheck(activity);  NfcInit(activity);  }  /** * 检查NFC是否打开 */  public static NfcAdapter NfcCheck(Activity activity) {  NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);  if (mNfcAdapter == null) {  return null;  } else {  if (!mNfcAdapter.isEnabled()) {  Intent setNfc = new Intent(Settings.ACTION_NFC_SETTINGS);  activity.startActivity(setNfc);  }  }  return mNfcAdapter;  }  /** * 初始化nfc设置 */  public static void NfcInit(Activity activity) {  mPendingIntent = PendingIntent.getActivity(activity, 0, new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);  IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);  IntentFilter filter2 = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);  try {  filter.addDataType("*/*");  } catch (IntentFilter.MalformedMimeTypeException e) {  e.printStackTrace();  }  mIntentFilter = new IntentFilter[]{filter, filter2};  mTechList = null;  }  /**  * 读取NFC的数据  */  public static String readNFCFromTag(Intent intent) throws UnsupportedEncodingException {  Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);  if (rawArray != null) {  NdefMessage mNdefMsg = (NdefMessage) rawArray[0];  NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];  if (mNdefRecord != null) {  String readResult = new String(mNdefRecord.getPayload(), "UTF-8");  return readResult;  }  }  return "";  }  /** * 往nfc写入数据 */  public static void writeNFCToTag(String data, Intent intent) throws IOException, FormatException {  Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  Ndef ndef = Ndef.get(tag);  ndef.connect();  NdefRecord ndefRecord = NdefRecord.createTextRecord(null, data);  NdefRecord[] records = {ndefRecord};  NdefMessage ndefMessage = new NdefMessage(records);  ndef.writeNdefMessage(ndefMessage);  }  /** * 读取nfcID */  public static String readNFCId(Intent intent) throws UnsupportedEncodingException {  Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  String id = ByteArrayToHexString(tag.getId());  return id;  }  /** * 将字节数组转换为字符串 */  private static String ByteArrayToHexString(byte[] inarray) {  int i, j, in;  String[] hex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};  String out = "";  for (j = 0; j < inarray.length; ++j) {  in = (int) inarray[j] & 0xff;  i = (in >> 4) & 0x0f;  out += hex[i];  i = in & 0x0f;  out += hex[i];  }  return out;  }
}

4、在NFCActivity代码中的使用、使用标签的前台调度系统;

@Override
public void initData() {  //nfc初始化设置  NfcUtils nfcUtils = new NfcUtils(this);
} @Override
protected void onResume() {  super.onResume();  //开启前台调度系统  NfcUtils.mNfcAdapter.enableForegroundDispatch(this, NfcUtils.mPendingIntent, NfcUtils.mIntentFilter, NfcUtils.mTechList);
}
@Override
protected void onPause() {  super.onPause();  //关闭前台调度系统  NfcUtils.mNfcAdapter.disableForegroundDispatch(this);
}@Override
protected void onNewIntent(Intent intent) {  super.onNewIntent(intent);  //当该Activity接收到NFC标签时,运行该方法  //调用工具方法,读取NFC数据  String str = NfcUtils.rendFromTag(intent);
}

5、判断手机是否支持NFC

PackageManager packageManager = this.getPackageManager();
boolean b1 = packageManager.hasSystemFeature(PackageManager.FEATURE_NFC);
Toast.makeText(context, "是否支持nfc:" + b1, 1).show();

Android实现NFC读写相关推荐

  1. android中NFC读写功能的实现方法

    这篇文章主要为大家详细介绍了android中NFC读写功能的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了android中NFC读写功能的 ...

  2. Android之NFC读写操作

    上次记录NFC知识时,还处在研究状态,现在项目的第一阶段开发已经完成.上篇Android之NFC开发,简单介绍了一些知识,也是对未知信息的研究,总要了解一点来龙去脉,省的心发慌.这篇文章总结自己的项目 ...

  3. Android中NFC读写

    参考网址:https://blog.csdn.net/sky2016_w/article/details/79026596 https://www.jianshu.com/p/61f90708bb02 ...

  4. Android开发NFC读写数据

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

  5. Android基于nfc的读写(一)

    这里写自定义目录标题 Android的NFC读写(一) NFC简介 代码解析 源码(Demo) Android的NFC读写(一) 近来,因需求需要开发nfc读写功能,网上查阅了许多资料,发现相关方面资 ...

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

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

  7. Android NFC 读写示例

    自己新浪博客转移 在Android NFC 应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器.Android对NFC的支持主要在 android.nfc 和andro ...

  8. android——实现NFC的读写

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

  9. android usb读写,安卓(Android)下如何开发USB NFC读写器app

    对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定.为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接 ...

最新文章

  1. 弄懂“进程”(上):3个组成部分、4个基本特征、4个基本状态
  2. “地理智慧 链接未来”,2020 GIS 软件技术大会主题大会召开
  3. 基于EEG/EMG/EOG的多模态人机接口,实时控制软机器人手
  4. 皮一皮:没有草原也敢买马?
  5. Git各指令的本质,真是通俗易懂啊
  6. 哪些CSS是可以被继承的--简单整理
  7. boost::units模块实现三角函数相关的测试程序
  8. ztree获取勾选节点数据并且与表单信息合并
  9. Sublime Text 3 搭建 React.js 开发环境
  10. c语言抓取抖音视频,【FiddlerScript】利用Fiddler中的FiddlerScript自动抓取抖音无水印视频并且自动保存...
  11. 苹果cms10 官方QQ微信防红防封代码
  12. 这款Java性能调优工具,真的很强!
  13. 【机房收费系统】---组合查询
  14. (转)30分钟正则表达式入门
  15. jupyter notebook更改默认浏览器
  16. 【nodejs】数据统计平台碰到的坑
  17. C语言之逻辑移位与算术移位
  18. 计算机绘制表格教案,word中插入表格教案
  19. 2.5W 字详解线程与锁了,面试随便问!!
  20. 手机流媒体服务器架设指南

热门文章

  1. 仿哔哩哔哩应用客户端Android版源码项目
  2. 西门子smart200与变频器控制程序 ,伺服脉冲控制
  3. 计算机学院毕业条幅,大学毕业季聚餐条幅标语
  4. uniapp扫描身份证获取信息
  5. xampp和dvwa环境安装(细致步骤)
  6. sw安装未成功_solidworks2016安装失败怎么清理
  7. RSA加密算法Python实现
  8. rHAT,国内首个三代序列比对算法
  9. mac升级到 macos ventura 13.0 后,git失效及gitlab认证失败问题
  10. Java登录QQ邮箱整理邮件的58的简历(一)