[Android] NFC数据传输

Android的nfc采用的什么格式传输数据

Android 系统中的 NFC 模块通常使用 NDEF (NFC Data Exchange Format) 格式来传输数据。

NDEF 格式是一种轻量级的数据交换格式,它用于定义 NFC 标签中的数据结构。NDEF 格式使用一组记录来表示数据,每条记录包含三部分:记录类型 (record type)、记录长度 (record length) 和记录数据 (record data)。记录类型用于表示记录中的数据类型,记录长度表示记录数据的长度,记录数据则是实际的数据内容。

NDEF 格式可以被应用在多种不同的场景中,例如传输文本、URL、图像、音频、视频等数据。使用 NDEF 格式可以让 NFC 标签在不同的设备之间交换数据,实现跨平台的数据交换。

传递文本

下面是一个简单的示例,展示了如何使用 Android 平台的 API 来传递文本数据:


// 编码 NDEF 数据
String text = "Hello, NFC!";
NdefRecord record = NdefRecord.createTextRecord(null, text);
NdefMessage message = new NdefMessage(record);
byte[] ndefData = message.toByteArray();

// 解码 NDEF 数据
NdefMessage message = new NdefMessage(ndefData);
NdefRecord record = message.getRecords()[0];
String text = new String(record.getPayload(), "UTF-8");

在上面的示例中,我们使用 NdefRecord.createTextRecord() 方法来创建一条文本记录,然后将记录放入 NdefMessage 中。调用 NdefMessage.toByteArray() 方法可以将 NDEF 消息转换为二进制数据。反之,调用 NdefMessage 的构造函数可以将二进制数据转换为 NDEF 消息,然后调用 getRecords() 方法可以获取 NDEF 消息中的记录,最后调用 getPayload() 方法可以获取记录中的数据。

传递图像

下面是一个简单的示例,展示了如何使用 Android 平台的 API 来传递图像数据:

// 编码 NDEF 数据
Bitmap bitmap = ...; // 要传递的图像
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] imageData = stream.toByteArray();
NdefRecord record = NdefRecord.createMime("image/png", imageData);
NdefMessage message = new NdefMessage(record);
byte[] ndefData = message.toByteArray();

// 解码 NDEF 数据
NdefMessage message = new NdefMessage(ndefData);
NdefRecord record = message.getRecords()[0];
String mimeType = record.getMimeType();
byte[] imageData = record.getPayload();
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

在上面的示例中,我们使用 NdefRecord.createMime() 方法来创建一条 MIME 类型记录,将图像数据作为记录的数据内容。调用 NdefMessage.toByteArray() 方法可以将 NDEF 消息转换为二进制数据。反之,调用 NdefMessage 的构造函数可以将二进制数据转换为 NDEF 消息,然后调用 getRecords() 方法可以获取 NDEF 消息中的记录,最后调用 getMimeType() 和 getPayload() 方法可以获取记录的 MIME 类型和数据内容。

传递音视频

下面是一个简单的示例,展示了如何使用 Android 平台的 API 来传递音频数据:

// 编码 NDEF 数据
String filePath = ...; // 要传递的音视频文件的路径
File file = new File(filePath);
byte[] audioData = FileUtils.readFileToByteArray(file);
NdefRecord record = NdefRecord.createMime("audio/mpeg", audioData);
NdefMessage message = new NdefMessage(record);
byte[] ndefData = message.toByteArray();

// 解码 NDEF 数据
NdefMessage message = new NdefMessage(ndefData);
NdefRecord record = message.getRecords()[0];
String mimeType = record.getMimeType();
byte[] audioData = record.getPayload();
File file = new File(...); // 解码后保存的音频文件的路径
FileUtils.writeByteArrayToFile(file, audioData);

在上面的示例中,我们使用 NdefRecord.createMime() 方法来创建一条 MIME 类型记录,将音频数据作为记录的数据内容。调用 NdefMessage.toByteArray() 方法可以将 NDEF 消息转换为二进制数据。反之,调用 NdefMessage 的构造函数可以将二进制数据转换为 NDEF 消息,然后调用 getRecords() 方法可以获取 NDEF 消息中的记录,最后调用 getMimeType() 和 getPayload() 方法可以获取记录的 MIME 类型和数据内容。

另外,需要注意的是,NDEF 格式可能不是所有类型的音频文件都可以使用的数据交换格式。如果你使用的是特定的音频格式,可以考虑使用其他的数据交换格式,例如 MP3 格式等。

还需要注意的是,视频文件通常比较大,在使用 NFC 进行数据交换时,可能会遇到数据传输速度慢、传输距离短等问题。如果你希望在使用 NFC 时能够高效地传输视频数据,可以考虑使用其他的技术,例如 WiFi Direct 等。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集

在这里插入图片描述
二、源码解析合集
在这里插入图片描述

三、开源框架合集
在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题

猜你喜欢

转载自blog.csdn.net/datian1234/article/details/131069616