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