android NFC的读写

本文介绍了NFC技术的基础知识,包括其定义、优势,并详细阐述了在Android平台上如何读写NFC标签,从声明权限、处理流程到读取和写入的步骤,还提供了测试代码作为实践指导。
摘要由CSDN通过智能技术生成

一、NFC知识

1、NFC是什么?

NFC,即Near Field Communication,近距离无线通讯技术,是一种短距离的(通常<=4cm或更短)高频(13.56M Hz)无线通信技术,它提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务 。
2、NFC的技术优势?
与蓝牙相比:NFC操作简单,配对迅速
与RFID相比:NFC适用范围广泛、可读可写,能直接集成在手机中
与红外线相比:数据传输较快、安全性高、能耗低
与二维码相比:识别迅速、信息类型多样
将来与移动支付相结合,势必简化支付的购买流程,重塑消费者的购物模式。

二、android下读写NFC

1、在AndroidManifest.xml中申明NFC权限
<uses-permission android:name="android.permission.NFC" /> 
<!-- 这项不一定需要,可以在android market中显示有NFC硬件 -->
<uses-feature android:name="android.hardware.nfc" android:required="true" />
2、NFC TAG的发布系统

当android设备扫描到一个NFC标签时,会自动寻找最适合的activity来处理这个TAG,如果有多个activity满足条件的话,会让用户选择使用哪个activity来处理,可理解为简单的事件响应与时间处理。
activity使用intentfilter来监听扫描到NFC标签事件。

IntentFilter ifilters = new IntentFilter();
ifilters.addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);//NDEF
ifilters.addAction(NfcAdapter.ACTION_TAG_DISCOVERED);//TAG
ifilters.addAction(NfcAdapter.ACTION_TECH_DISCOVERED);//TECH
3、检测到标签后在Activity中的处理流程

3.1 在onCreate()中获取NfcAdapter对象

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

3.2 在onNewIntent()中获取Tag对象或者NdefMessage信息

//获取Tag对象
Tag tag = intent.getParcelableExra(NfcAdapter.EXTRA_TAG);
//获取NdefMessage信息
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

3.3 也可以通过Tag创建Ndef对象等,以实现标签的属性和I/O操作。

Ndef ndef = Ndef.get(tag);
4、NDEF格式标签的读取流程

4.1 在onCreate()中获取NfcAdapter对象
4.2 在onNewIntent()中判断是否为NDEF格式标签(ACTION_NDEF_DISCOVERED),若是则获取NdefMessage信息;(需要强制转换成NdefMessage对象)

Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

4.3 对NdefMessage对象进行解析,获取相关的文本信息或Uri等

5、NDEF格式标签的写入流程

5.1 在onCreate()中获取NfcAdapter对象
5.2 在onNewIntent()中获取Tag对象

Tag tag = intent.getParcelableExra(NfcAdapter.EXTRA_TAG);

5.3 通过Tag创建Ndef对象

Ndef ndef = Ndef.get(tag);

5.4 将文本等数据封装成NdefMessage
5.5 判断是否为NDEF格式标签
若是NDEF格式:
(1)允许进行标签操作:ndef.connect();
(2)调用ndef.writeNdefMessage(NdefMessage)方法写入。
若非NDEF格式:
(1)NdefFromatable format = NdefFromatable.get();
(2)允许进行标签操作:format.connect();
(3)调用format.format(NdefMessage)方法写入。

三、测试代码

import java.io.UnsupportedEncodingException;

import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.tech.NfcA;
import android.nfc.tech.NfcB;
import android.nfc.tech.NfcF;
import android.nfc.tech.NfcV;
import android.os.Bundle;
import android.os.Parcelable;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

/**
 * 注:谷歌推荐的数据格式为NDEF,所以本次DEMO的读写都是采用该格式.
 */
public class MainActivity extends Activity {
   
    private TextView ifo_NFC;
    private NfcAdapter nfcAdapter;
    private String readResult = "";
    private PendingIntent pendingIntent;
    private IntentFilter[] mFilters;
    private String[][] mTechLists;
    private boolean isFirst = true;
    private Button toWBtn;
    private IntentFilter ndef;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值