简单谈谈NFC(转载自-tlex/pku_android)
NFC是Near Field Communication缩写,又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID,最早由Sony和Philips各自开发成功,主要用于手机等手持设备中提供M2M(Machine to Machine)的通信。由于近场通讯具有天然的安全性,因此,NFC技术被认为在手机支付等领域具有很大的应用前景。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。NFC 提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。
目前,NFC Forum在全球拥有数百个成员,包括:SONY、 Phlips、LG、摩托罗拉、NXP、NEC、三星、atoam、Intel、其中中国成员有OPPO、中国移动、华为、中兴、上海同耀和台湾正隆等公司。
而对于NFC手机来说,相比普通智能手机基本可以实现以下几个功能:
1、移动支付:例如在商场、超市、饭店等地方购物结账时,刷一下手机,结账走人
2、门禁通过:例如小区门禁,如果我们手机中存有相应的验证码,进门时刷一下,OK
3、数据传输:将两台支持NFC功能的手机,背对背贴好,通过Android Beam即可完成照片、音乐等数据的传输。
4、浏览信息:将手机靠近带有NFC功能的公共设施上,即可浏览交通、演出、天气等信息。
5、智能标签:可以通过标签来预设置相关的应用然后手机贴近标签后实现一些预设的功能,例如进入某些大学的图书馆,门口可能会有一个智能标签,带有NFC手机贴近后,就会自动切换到静音模式,或者在会议室门口,刷一下标签,即可开启录音机应用。
6、读取感应卡信息:例如银行卡电子现金余额及消费记录、公家卡余额及消费记录等等。
7、移动支付:例如在商场、超市、饭店等地方购物结账时,刷一下手机,结账走人
8、门禁通过:例如小区门禁,如果我们手机中存有相应的验证码,进门时刷一下,OK
9、数据传输:将两台支持NFC功能的手机,背对背贴好,通过Android Beam即可完成照片、音乐等数据的传输。
10、浏览信息:将手机靠近带有NFC功能的公共设施上,即可浏览交通、演出、天气等信息。
11、智能标签:可以通过标签来预设置相关的应用然后手机贴近标签后实现一些预设的功能,例如进入某些大学的图书馆,门口可能会有一个智能标签,带有NFC手机贴近后,就会自动切换到静音模式,或者在会议室门口,刷一下标签,即可开启录音机应用。
12、读取感应卡信息:例如银行卡电子现金余额及消费记录、公家卡余额及消费记录等等
--------------------------------------------------------------------蜜汁分割线--------------------------------------------------------------------------------
1.猫掌柜
这个软件有点意思,是将NFC手机变成一台标准的收款用POS机的app。可以用来收款。安全性嘛,IC卡的安全性还是可以的。关键点:可以刷信用卡。恩,其他的就不多说了。可以称之为信用卡神器了,目前还没在市面上看到同类型的产品。所以也蛮好玩的。
技术上蛮有意思的,没有任何其他的硬件,只要手机带有NFC模块即可刷卡。有兴趣的朋友可以去了解一下,这里就不多说了。
这里丢个演示视频,诸位可以看看。
http://v.youku.com/v_show/id_XMTI5OTkxMDEwNA==.html
2.中国移动和包
中国移动和包(NFC)业务是将您日常生活中使用的各种卡片应用(如银行卡、公交卡、校园/企业一卡通、会员卡等)装载在具有NFC功能的手机中,让您随时随地刷手机消费,实现手机变钱包的功能。在有银联闪付(Quick Pass)或和包(NFC)业务合作标识的现场商家进行消费时,您只需持NFC手机靠近对应业务受理终端轻轻一刷即可完成支付。
商超购物、公交/地铁、优惠折扣……中国移动和包(NFC)革新化设计,为您打造快捷、安全、时尚、品质的全新生活体验!
移动这个和包可以用NFC-SIM卡,即可以通过这个来实现手机NFC刷卡这个功能。当然,需要更换移动的NFC-SIM卡才能实现这个功能。
3.一卡通官方的e乐充公交卡
乐充公交卡是北京市政交通一卡通有限公司专为NFC手机设计的一款集话费、Q币充值,电影票优惠购买,公交卡的查询、充值和消费功能为一体的软件;当前支持全国各地支持全国各地公交卡方便快捷余额查询,支持北京公交卡的充值。
下载地址:http://www.elechong.com/download
4.翼支付
翼支付产品是中国电信的移动支付产品,您开通中国电信翼支付账户并储值后,即可在中国电信联盟商家和合作商户使用该账户通过网站、短信、语音等方式进行远程支付,办理翼支付卡(RFID-UIM卡)后还可通过手机刷POS机方式进行现场支付。
翼支付支持很多城市的NFC-SIM卡来刷公交卡,这个实用性很强,强烈推荐!
官网:https://www.bestpay.com.cn/index
5.支付宝
支付宝钱包8.0推出了令人耳目一新的NFC功能,通过开启支付宝钱包的NFC功能,您就可以将手机的NFC标签靠近公交卡、银行卡等带有芯片的IC卡上,可迅速读取卡内余额、卡的信息,还可以给卡进行充值,非常贴心实用。
官网:https://www.alipay.com/
6.招商银行手机银行NFC支付
一闪通是以手机为载体,用来替代一卡通、信用卡业务的进入IC卡。客户凭本人一卡通通过制定型号手机的手机银行客户端申请“一闪通”,申请成功后我行自动在手机的内置芯片中写入一张全新卡号的进入IC卡。客户可持写入“一闪通(借记卡)”直接使用对应一卡通的密码、账户资金、功能限额。
一闪通已经集成到“招商银行掌上银行”、“掌上生活”两个app里面。
目前,支持的手机有:
手机品牌 三星 华为 OPPO 魅族 金立
手机机型 三星Note4 荣耀6Plus N3 N1 Mini MX4 Pro E8
具体型号 N9100 PE-TL10 N5207 N5117 全部支持 GN9008
N9106W E100-TL10 N5209
7.云飞NFC
云飞NFC是一款基于NFC的,功能强大的应用程序,通过它可以进行场景的快速切换、应用启动、改变手机设置等操作,还可以读取电子标签,交通卡,银行卡等信息。
8.NFC闹钟
NFC闹钟,英文原名为NFC Alarm Clock,是一款基于NFC的闹钟应用;用户在设置闹钟是需要将关闭闹钟的信息写入到NFC标签中,起床时,用户必须用手机扫描该标签才能停止闹钟。
9.nfc标签,适用于于nfc android自带的读写功能
在Android NFC 应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在 android.nfc 和android.nfc.tech 两个包中。
android.nfc 包中主要类如下:
NfcManager 可以用来管理Android设备中指出的所有NFCAdapter,但由于大部分Android设备只支持一个NFC Adapter,所以一般直接调用getDefaultAapater来获取手机中的Adapter。
NfcAdapter 相当于一个NFC适配器,类似于电脑装了网络适配器才能上网,手机装了NfcAdapter才能发起NFC通信。
NDEF: NFC Data Exchange Format,即NFC数据交换格式。
NdefMessage 和NdefRecord NDEF 为NFC forum 定义的数据格式。
Tag 代表一个被动式Tag对象,可以代表一个标签,卡片等。当Android设备检测到一个Tag时,会创建一个Tag对象,将其放在Intent对象,然后发送到相应的Activity。
android.nfc.tech 中则定义了可以对Tag进行的读写操作的类,这些类按照其使用的技术类型可以分成不同的类如:NfcA, NfcB, NfcF,以及MifareClassic 等。其中MifareClassic比较常见。
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.park"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.NFC" />
<uses-sdk android:minSdkVersion="14" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.xxx.park.activity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
</application>
</manifest>
</span>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.MifareClassic</tech> </tech-list> </resources>
package com.softsea.cs_park; import android.app.Activity;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.os.Bundle;
import android.widget.TextView; public class activity extends Activity {
NfcAdapter nfcAdapter;
TextView promt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
promt = (TextView) findViewById(R.id.promt);
// 获取默认的NFC控制器
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
promt.setText("设备不支持NFC!");
finish();
return;
}
if (!nfcAdapter.isEnabled()) {
promt.setText("请在系统设置中先启用NFC功能!");
finish();
return;
}
} @Override
protected void onResume() {
super.onResume();
//得到是否检测到ACTION_TECH_DISCOVERED触发
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())) {
//处理该intent
processIntent(getIntent());
}
}
//字符序列转换为16进制字符串
private String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("0x");
if (src == null || src.length <= 0) {
return null;
}
char[] buffer = new char[2];
for (int i = 0; i < src.length; i++) {
buffer[0] = Character.forDigit((src[i] >>> 4) & 0x0F, 16);
buffer[1] = Character.forDigit(src[i] & 0x0F, 16);
System.out.println(buffer);
stringBuilder.append(buffer);
}
return stringBuilder.toString();
} /**
* Parses the NDEF Message from the intent and prints to the TextView
*/
private void processIntent(Intent intent) {
//取出封装在intent中的TAG
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
for (String tech : tagFromIntent.getTechList()) {
System.out.println(tech);
}
boolean auth = false;
//读取TAG
MifareClassic mfc = MifareClassic.get(tagFromIntent);
try {
String metaInfo = "";
//Enable I/O operations to the tag from this TagTechnology object.
mfc.connect();
int type = mfc.getType();//获取TAG的类型
int sectorCount = mfc.getSectorCount();//获取TAG中包含的扇区数
String typeS = "";
switch (type) {
case MifareClassic.TYPE_CLASSIC:
typeS = "TYPE_CLASSIC";
break;
case MifareClassic.TYPE_PLUS:
typeS = "TYPE_PLUS";
break;
case MifareClassic.TYPE_PRO:
typeS = "TYPE_PRO";
break;
case MifareClassic.TYPE_UNKNOWN:
typeS = "TYPE_UNKNOWN";
break;
}
metaInfo += "卡片类型:" + typeS + "\n共" + sectorCount + "个扇区\n共"
+ mfc.getBlockCount() + "个块\n存储空间: " + mfc.getSize() + "B\n";
for (int j = 0; j < sectorCount; j++) {
//Authenticate a sector with key A.
auth = mfc.authenticateSectorWithKeyA(j,
MifareClassic.KEY_DEFAULT);
int bCount;
int bIndex;
if (auth) {
metaInfo += "Sector " + j + ":验证成功\n";
// 读取扇区中的块
bCount = mfc.getBlockCountInSector(j);
bIndex = mfc.sectorToBlock(j);
for (int i = 0; i < bCount; i++) {
byte[] data = mfc.readBlock(bIndex);
metaInfo += "Block " + bIndex + " : "
+ bytesToHexString(data) + "\n";
bIndex++;
}
} else {
metaInfo += "Sector " + j + ":验证失败\n";
}
}
promt.setText(metaInfo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
参考联接:
http://developer.android.com/guide/topics/nfc/nfc.html
http://developer.android.com/reference/android/nfc/tech/MifareClassic.html
http://www.imobilebbs.com/wordpress/?p=2822
http://blog.csdn.net/pku_android/article/details/7430788
http://tieba.baidu.com/p/4163274922
简单谈谈NFC(转载自-tlex/pku_android)的更多相关文章
- 【转】简单谈谈python的反射机制
[转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...
- HTTP/2.0 简单总结(转载)
HTTP/2.0 简单总结(转载于https://linjunzhu.github.io/blog/2016/03/10/http2-zongjie/) 如何使用上 HTTP/2.0 需要浏览器的支持 ...
- 简单谈谈Python中的几种常见的数据类型
简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...
- 简单谈谈contextlib的使用
简单谈谈contextlib的使用 写在前面 做这件事的原因: 在看书的时候,我发现了有大佬们用contextlib管理上下文,真的很牛皮,但是百度了以下,每个大佬都写了很多很全很深刻,讲道理五花八门 ...
- [转载]JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现
https://www.cnblogs.com/chenwolong/p/Token.html
- 简单谈谈如何利用h5实现音频的播放
作者:白狼 出处:http://www.manks.top/article/h5_audio本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律 ...
- libevent的简单应用【转载】
本文转载自: http://blog.csdn.net/liuguanghui1988/article/details/7090531 Libevent的应用主要围绕几大事件:超时事件.信号事件.读/ ...
- 简单谈谈js中的MVC
MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据).视图.控制器(分发器). 本文将用一个经典的例子todoList来展开(代码在最后). 一个事件发生的过程(通信单向流动): ...
- 自动化单元测试工具 EvoSuite 的简单使用 【转载】
转载:https://www.cnblogs.com/hughding/p/evosuite.html 一.EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用 ...
随机推荐
- 【先定一个小目标】在Windows下的安装Elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- centos 7.0 安装nginx 1.9.10
可以参考以前安装成功的案例 centos 7.0 nginx 1.7.9成功安装过程 官网下载 http://nginx.org/en/download.html nginx下载位置 /usr/loc ...
- java内存泄漏的几种情况
转载于http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静态 ...
- [从产品角度学excel 04]-单元格的“衣服”
忘记发这里了..补发一下 这是<从产品角度学EXCEL>系列——单元格篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 2 EXCEL里的树形结构 3 单元格 ...
- 网络第一节——NSURLConnection
一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... ...
- 转:入门Webpack,看这篇就够了
写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...
- Qt工程打包发布
Qt版本 5.7.1 1.添加环境变量 在..\Qt5.7.0\5.7\msvc2013_64\bin(..省略了盘符,例如我的是D:\Qt\Qt5.7.0\5.7\msvc2013_64\bin) ...
- iOS6_自动约束 Constraints
取消Constraints(约束) 问题描述:xib文件设计的时候控件已经摆好位置,但是每次调试的时候控件的位置又乱了 解决方法:选中 xib文件,在右侧第一项(Identity and type)的 ...
- 额。。万恶之源就是c
http://blog.csdn.net/feeltouch/article/details/45155529
- -bash: fork: retry: Resource temporarily unavailable
登陆不了服务器The server refused to start a shell. 登陆服务器后执行ls命令报错: 1 2 $ls -bash: fork: retry: Resource t ...