首页 > 其他分享 >[Android] NFC数据传输

[Android] NFC数据传输

时间:2023-06-19 14:04:47浏览次数:47  
标签:NFC NdefRecord NDEF record NdefMessage 数据传输 Android 数据 message


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 等。


标签:NFC,NdefRecord,NDEF,record,NdefMessage,数据传输,Android,数据,message
From: https://blog.51cto.com/u_16163442/6512802

相关文章

  • 【Android面试】2023最新面试专题四:Java核心基础(上)
    1Java中提供了抽象类还有接口,开发中如何去选择呢?这道题想考察什么?Java是面向对象编程的,抽象是它的一大特征,而体现这个特征的就是抽象类与接口。抽象类与接口某些情况下都能够互相替代,但是如果真的都能够互相替代,那Java为何会设计出抽象与接口的概念?这就需要面试者能够掌握两者的区......
  • Android应用开发者,你们真的了解Activity的生命周期吗?
    一开始,我觉得Activity的生命周期虽然过于复杂,但它不应该是一个难题。我的意思是:对于Android开发新手来说,如何正确地处理Activity生命周期可能有点困难,但是我无法想象对于那些富有经验的android开发者来说,这依然是一个棘手的问题。我还是想的太简单了。一会儿我会告诉你整个故事,但是......
  • 【Android面试】2023年Android中高级最全面试题,轻松拿offer
    前言2023年的金三银四来了,不知道大家准备好了没?对于程序员而言,无论是想加快个人技能成长速度,或是想要升职涨薪,都需要不断进阶,跳槽到规模与业务更大、并且有成熟的技术成长体系的公司当中去。而想要跳槽成功,面试可以说是决定性因素。这里给大家整理了一份935页的《2023年Android中高......
  • 使用 koin 作为 Android 注入工具,真香
    koin为Android提供了简单易用的API接口,让你简单轻松地接入koin框架。[koin在Android中的gradle配置]mp.weixin.qq.com/s/bscC7mO4O…1.Application类中startKoin从您的类中,您可以使用该函数并注入Android上下文,如下所示:ApplicationstartKoinandroidContextclass......
  • 收藏向 | 车载Android系统开发学习专题,进军车载必备
    如今,智能手机已无处不在,移动操作系统开始向新的领域扩张,这其中,就有近段时间被苹果CarPlay催热的车载系统。目前全球的汽车数量已经超过10亿辆,但车载系统却仍然有非常大的提升空间。汽车厂商们也早已意识到了车载对于未来汽车市场的重要性,开始布局更加智能的车载系统,让自己的汽车能......
  • 如何有效阅读源码?最新Android开发源码精编解析,优秀程序员必备
    大多数人阅读源码是为了应对面试中可能会提到的相关问题,提高面试的成功率,因此选择源码相关的书籍和视频来看是速成的最好方法。但对于想真正提高编码水平,让自己的事业更上一层楼的开发者而言,只有下功夫、花时间,才能有所突破。不过大家也清楚,阅读源码是比较困难的,尤其是对于项目背景......
  • 2022最全面&详细的Android学习指南,零基础快速入门的通道
    随着Android技术栈的不断扩展,不少新的技术如Flutter、RN、小程序等涌入我们的视野,也有越来越多的人投身入Android开发的赛道。无论你是35岁正在遭遇中年职业危机的程序员,还是刚刚毕业的大学生/研究生,想走技术这条路,都需要不断学习,风雨兼程!那么,如何系统的学习Android呢?首先来看看And......
  • Android进阶宝典 -- JetPack Navigation的高级用法(解决路由跳转新建Fragment页面问题)
    相信有相当一部分的伙伴,在项目开发中依然使用Activity作为页面承载体,有10个页面就会有10个Activity,这种方式当然没问题,但是如果涉及到页面间数据共享,那么使用多Activity就不是很方便了,需要Activity传递各种数据,涉及到数据的序列化与反序列化;因此产生了单Activity和多Fragment架构,所......
  • Android开发卷吗?卷;怎么破?从Framework提升自己——字节总监
    前言现在客户端卷的风起云涌,很多安卓开发者都是抱怨连天。内卷之下,相比本来就堪忧的发量,前途未卜的迷茫带来的精神折磨更是雪上加霜。其实平心而论,很多开发者对现有知识都掌握的不够扎实,例如Framework。对于大部分的开发者来说,AndroidFrameWork都无法做到精通,更别提触类旁通了。想......
  • 2022最新 Android 中高级面试题汇总(含答案解析)
    准备面试少不了Android面试题复习,面试题也需要有方法,高效的进行复习,所以给大家分享一份《2022最新Android中高级面试题汇总》,基本涵盖了Android中高级工程师面试必备知识点,希望可以帮助一些想要跳槽涨薪的朋友更好、更高效的复习,实现跳槽涨薪。Android中高级面试题主要包含知识......