Android Ndef Message解析

 @concept:NDEF NFC Form论坛定义的NFC数据交换通用数据格式。

如上所示:一条NDEF消息由诸多Record记录组成,Record又由Header和Payload组成,Header定义了Payload的ID 长度与ID,携带数据的格式与格式长度,携带的数据的字节数。

Header的具体结构如下图:

 

第一个字节是状态字节(1byte=8bit),用于指定Record有无ID,该Record是首记录还是尾记录,是长记录还是短记录,以及关键的Record的类型。

Record的类型可以有一下8种,Type指定的是载荷Payload的类型。

常见的Payload类型有:Text、URI、MIME类型,TNF_WELL_KNOWN类型的Record类型,有以下几种Payload类型。

本文重点关注RTD_TEXT类型的解析,Payload类型为RTD_TEXT的Payload结构如下。

第一个字节(1byte)是状态标志位,位定如下:

这个状态字节0-5位定义了语言码的长度,最高位MSB定义文本的编码格式。注意语言码和文本编码是两个概念,前面定义了语言码长度,紧接着Payload第二个字节开始就定义了对应长度的语言码字节。语言码之后的字节就是文本的字节(实际的内容),文本的编码方式就是MSB位定义的编码格式。

相关解析代码如下所示:0200是八级制对应十六进制0x80,最后解析出来的字符串放在payloadStr字符变量中。

大致流程为:取Record状态字节,根据文本编码方式以及语言码长度取出语言码,根据文本的编码方式将文本内容对应的字节按照相应编码格式转换为字符串。

 

转载于:https://www.cnblogs.com/geekj/p/10755912.html

Android系统中,实现通过NFC (近场通信) 将WiFi密码存储在NDEF(Next Generation Encryption Format,下一代加密格式)记录里,并设置为自动连接,通常需要以下几个步骤: 1. **权限申请**: 首先,在`AndroidManifest.xml`文件中添加对NFC读写的权限声明。 ```xml <uses-permission android:name="android.permission.NFC" /> ``` 2. **创建NDEF消息**: 使用`NdefMessage`构造函数创建包含WiFi信息的NDEF消息,其中可以包含URL类型的数据,表示WiFi配置链接,以及文本类型数据,存储密码等详细信息。 ```java NdefMessage message = new NdefMessage( new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URL, null, "http://example.com/wifi-config") ); byte[] passwordBytes = ... // WiFi密码转换成字节数组 message.add(new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[]{}, passwordBytes)); ``` 3. **将NDEF消息写入Tag**: 使用`NfcAdapter` API,如`tagWriter.write()`方法将NDEF消息写入NFC标签或识别人卡。 4. **解析NDEF消息**: 用户将卡片靠近设备时,通过监听NFC Tag被发现的事件,读取NDEF消息,然后解析出WiFi的配置信息。 ```java Intent intent = getIntent(); NdefMessage ndefMessage = Ndef.getMessageFromIntent(intent); // 解析URL获取WiFi配置链接,解析文本获取密码... ``` 5. **自动连接WiFi**: 根据解析出来的配置信息,使用`WifiManager` API尝试连接WiFi。这通常涉及创建一个新的`WifiConfiguration`对象,设置SSID、密码等,然后调用`connect()`方法。 ```java WifiConfiguration config = ... // 填充配置信息 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiManager.addNetwork(config); wifiManager.connect(config.SSID, config.preSharedKey); ``` 6. **异常处理**: 考虑到可能出现的各种错误,比如无法连接网络、用户取消操作等,记得添加适当的错误处理代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值