Android NFC研究工具包入门指南

news/2024/7/16 8:14:21 标签: android, android studio, ide

目录

一、NFC简介

二、Android NFC研究工具包

三、NFC的开发环境配置

四、NFC的使用方法

五、Android Beam

六、总结


一、NFC简介

NFC(Near Field Communication)近场通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在10厘米范围内)进行通信。在现实生活中,我们常常利用NFC进行公交卡支付、门禁卡识别等应用。

源码下载

二、Android NFC研究工具包

Android为NFC的开发提供了全面的支持,包含了API和相关的硬件支持,使开发者可以轻松地在应用中加入NFC功能。主要的功能包括:

  • 读取和写入NFC标签
  • 通过Android Beam功能,使两个装有NFC的设备间进行数据传输
  • 卡模拟,使手机能模拟成NFC卡

三、NFC的开发环境配置

要使用Android的NFC功能,需要满足以下条件:

  • Android设备需要支持NFC,并且系统版本至少是Android 2.3.3。
  • Android的SDK中必须包含Google的NFC库。

检查设备是否支持NFC的代码如下:

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
    Toast.makeText(this, "该设备不支持NFC功能", Toast.LENGTH_SHORT).show();
} else if (!nfcAdapter.isEnabled()) {
    Toast.makeText(this, "请在系统设置中先启用NFC功能", Toast.LENGTH_SHORT).show();
}

四、NFC的使用方法

下面是一段简单的示例代码,展示如何读取一个NFC标签中的文本数据:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMessages != null) {
            NdefMessage[] messages = new NdefMessage[rawMessages.length];
            for (int i = 0; i < rawMessages.length; i++) {
                messages[i] = (NdefMessage) rawMessages[i];
            }
            // Process the messages array.
            processNDEFMsg(messages[0]);
        }
    }
}

private void processNDEFMsg(NdefMessage msg) {
    for (NdefRecord record : msg.getRecords()) {
        if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)) {
            byte[] payload = record.getPayload();
            String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";
            int languageCodeLength = payload[0] & 0063;

            try {
                String textData = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
                // Display the text.
                Toast.makeText(this, textData, Toast.LENGTH_SHORT).show();
            }
            catch (UnsupportedEncodingException e) {
                Log.e("NFC", "Unsupported Encoding", e);
            }
        }
    }
}

在Android中,所有的NFC交互都是通过Intent机制进行的。当一个NFC标签靠近设备时,系统会自动创建一个Intent并将其发送到相应的Activity。开发者需要在Activity中重写onNewIntent()方法来处理这个Intent。

上面的代码中,我们首先检查Intent的Action是否为ACTION_NDEF_DISCOVERED,如果是,就获取并解析NDEF消息。NDEF(NFC Data Exchange Format)是一种常见的NFC数据格式,通常用于存储文本、URL等简单类型的数据。

processNDEFMsg()方法中,我们遍历NDEF消息中的所有记录,查找TNF(Type Name Format)为TNF_WELL_KNOWN和类型为RTD_TEXT的记录,这种记录通常表示包含了文本数据。我们提取出文本数据,并显示出来。

五、Android Beam

Android Beam是Android 4.0引入的一项新功能,允许用户通过NFC将数据从一台设备传送到另一台设备。使用Android Beam的代码如下:

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        String text = ("Beam me up, Android!\n\n" + "Beam Time: " + new SimpleDateFormat("HH:mm:ss").format(new Date()));
        NdefMessage msg = new NdefMessage(
                new NdefRecord[] { NdefRecord.createMime("application/vnd.com.example.android.beam", text.getBytes())}
        );
        return msg;
    }
}, this);

在这个代码中,我们首先获取NfcAdapter的实例,然后调用setNdefPushMessageCallback()方法来设置一个回调函数。当两台设备靠近并且准备好发送数据时,这个回调函数就会被调用。我们在回调函数中创建了一个包含文本数据的NDEF消息,并返回。当数据成功发送到另一台设备时,这个消息就会被发送出去。

六、总结

Android的NFC功能非常强大,只需要简单的配置和少量的代码就可以实现各种复杂的功能。如果你对NFC技术感兴趣,或者在你的应用中需要使用NFC功能,我强烈建议你去查看Android官方文档和示例代码,学习更多关于NFC的知识。

当然,NFC的应用也不仅仅限于以上提到的内容,更多的可能需要你去探索和实现。希望通过这篇文章,你对Android NFC有了更深入的了解,也希望这些知识能帮助你在实际项目中实现更多有趣的功能。


http://www.niftyadmin.cn/n/345061.html

相关文章

GOOGLE_APPLICATION_CREDENTIALS - Google 服务账号使用

文章目录 关于 Google 服务账号创建验证关于 Google 服务账号 官方相关资料 服务帐号概览 https://cloud.google.com/iam/docs/service-account-overview?hl=zh-cn#key-types服务帐号使用最佳实践 https://cloud.google.com/iam/docs/best-practices-service-accounts?hl=zh…

【Linux】Linux 下的权限(初)

d1 目录下有目录dir&#xff0c;和一个普通文件 test.c 重点看到文件的各种权限&#xff0c;拆分清晰地理解&#xff08;重&#xff09; 观察到权限和文件类型一坨除了第一列的文件类型其他的都是文件相关的权限&#xff0c;而且是三个三个分开 为什么分开呢&#xff1f;是因为…

chatgpt赋能Python-python5的阶乘

Python5的阶乘介绍 Python是一门广泛应用于编写脚本、自动化、爬虫、数据分析等方面的编程语言&#xff0c;也是很多科研领域使用的首选。Python的功能和灵活性可以帮助用户解决各种问题&#xff0c;而本文要介绍的是Python中计算阶乘的方法。 阶乘是数学中的一个概念&#x…

Elisp之实现代码自动高亮并跳转(十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

FFmpeg学习:FFmpeg4数据结构分析

FFmpeg数据结构分析 FFMPEG中结构体很多。最关键的结构体可以分成以下几类&#xff1a; 1、解协议&#xff08;http,rtsp,rtmp,mms&#xff09; AVIOContext&#xff0c;URLProtocol&#xff0c;URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音…

使用贝壳物联控制led灯

1、完成esp8266 01S的固件刷机 1.1 使用刷机软件刷原生固件 esp8266 01S要使用标准固件1M&#xff08;主要是01S是8M&#xff09; 1.2 刷机接线方式 ttl直接连esp8266 接线&#xff1a; tts esp8266 3v3 ---》面包板高----》3.3 tx--------------…

使用GraalVM 构建 Spring Boot 3.0 原生可执行文件

GraalVM 介绍 既然是VM&#xff0c;那肯定也是一个虚拟机&#xff0c;那它跟JVM有关系吗&#xff1f;有一定关系&#xff0c;GraalVM 可以完全取代上面提到的那几种虚拟机&#xff0c;比如 HotSpot。把你之前运行在 HotSpot 上的代码直接平移到 GraalVM 上&#xff0c;不用做任…

C++STL算法篇之集合算法

CSTL算法篇之集合算法 集合算法set_union(并集)set_difference(差集)set_intersection(交集)set_symmetric_difference(对称差集) 集合算法 当然最好还是要包含 functional algorithm 这2个头文件 集合算法有4个函数 1.set_union 交集 2.set_difference 差集 3.set_intersectio…