# Android NFC开发 #
然后,需要为指定的Activity设置启动模式
----------
## 这里要说的是采用setNdefPushMessage的方式,手动发送一个NFC信息,属于NFC设备对NFC设备(p2p)的方式 ##
**PS:在这里我要吐槽一下,对于这个p2p方式的NFC数据传送,也是没谁了,要求手机的NFC传送点和点对上才能和平发送,就是手机后背有个NFC点,碰上,屏幕上才会弹出 "触摸发送" 选项,估计是塑料壳的原因吧,金属壳的不知道会不会更容易些,不吐了,上货!**
----------
**步骤1. 检查手机是否有NFC功能①,以及NFC和NFC_Beam功能②是否开启;**
**①:有NFC功能才能进行NFC的相关操作**
**②:NFC_Beam指的是设备和设备之间传输必须要开的(本人是这么理解的),不开仅仅可以设备扫卡(比如公交卡等NFC卡)**
**步骤2. 发送消息setNdefPushMessage**
**步骤3. 拦截(姑且称之为拦截)消息并处理**
**步骤4. 在MainFest文件中添加相应权限和activity-action**
----------
## 下面上代码,具体细节在注释中都能看见 ##
**对了,对NFC进行操作需要NfcAdapter这个类,是Android自带的**
----------
2017-05-19
无奈,一直用MarkDown编辑器 现在这种编辑器用的不习惯了,刚才看私信发现有童鞋提到不走onNewIntent方法,我回到博客发现有些地方没有写,我的锅我自己背!
首先 需要在Manifest中为拦截NFC消息的Activity声明Filter
<intent-filter>
<!--拦截NFC消息-->
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
然后,需要为指定的Activity设置启动模式
android:launchMode="singleInstance"
感谢Ds_Esaka提出的问题!
另外把源码上传到github上了
发送端 https://github.com/RedWolfChao/NFCSending
接收端 https://github.com/RedWolfChao/NFCReceiving
----------
**我参照了NFC实战详解(赵波的一本书),没有NFC基本知识了解的推荐去看这本书的前3章,1-2小时就看完了 --**
2016年11.17补充 今天用到了NFC的技术,发现BLOG上有点东西忘记了,现补上..需要在配置文件中声明一个权限,和安装设备,没有NFC功能的设备不让下载--应用市场可用
<!-- NFC权限 --> | |
<uses-permission android:name="android.permission.NFC" /> | |
<!-- 限制安装的设备 --> | |
<uses-feature | |
android:name="android.hardware.nfc" | |
android:required="true" /> |
----------
## 这里要说的是采用setNdefPushMessage的方式,手动发送一个NFC信息,属于NFC设备对NFC设备(p2p)的方式 ##
**PS:在这里我要吐槽一下,对于这个p2p方式的NFC数据传送,也是没谁了,要求手机的NFC传送点和点对上才能和平发送,就是手机后背有个NFC点,碰上,屏幕上才会弹出 "触摸发送" 选项,估计是塑料壳的原因吧,金属壳的不知道会不会更容易些,不吐了,上货!**
----------
**步骤1. 检查手机是否有NFC功能①,以及NFC和NFC_Beam功能②是否开启;**
**①:有NFC功能才能进行NFC的相关操作**
**②:NFC_Beam指的是设备和设备之间传输必须要开的(本人是这么理解的),不开仅仅可以设备扫卡(比如公交卡等NFC卡)**
**步骤2. 发送消息setNdefPushMessage**
**步骤3. 拦截(姑且称之为拦截)消息并处理**
**步骤4. 在MainFest文件中添加相应权限和activity-action**
----------
## 下面上代码,具体细节在注释中都能看见 ##
**对了,对NFC进行操作需要NfcAdapter这个类,是Android自带的**
**步骤1. 我定义了一个方法,进行了NFC是否开启的判断**
private void checkNFCFunction() {
// 获取NFCAdapter(这个是全局的,参数是一个Context)
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
// mNfcAdapter为Null表示机器没有NFC功能
if (mNfcAdapter == null) {
// 提示 (这里是自定义的Log日志类,没有定义过可以用Log.I进行替换或者直接吐司,我也会上传代码)
DebugUtils.LogI("没有NFC功能", getClass());
} else {
// 表示NFC功能未打开,就要弹出Dialog提示用户打开了
if (!mNfcAdapter.isEnabled()) {
Dialog dialog = null;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("警告!");
builder.setMessage("NFC功能未开启,是否前往开启(不开启将无法继续)");
builder.setPositiveButton("开启", new DialogInterface.OnClickListener() {