JAVA蓝牙无线通讯技术API概述

合集下载

Android中文API(70)——BluetoothDevice[蓝牙]

Android中文API(70)——BluetoothDevice[蓝牙]

Android中⽂API(70)——BluetoothDevice[蓝⽛]前⾔声明 欢迎转载,但请保留⽂章原始出处:)正⽂ ⼀、结构public static class BluetoothDevice extends Object implements Parcelableng.Objectandroid.bluetooth.BluetoothDevice ⼆、概述 代表⼀个远程蓝⽛设备。

让你创建⼀个带有各⾃设备的BluetoothDevice或者查询其皆如名称、地址、类和连接状态等信息。

对于蓝⽛硬件地址⽽⾔,这个类仅仅是⼀个瘦包装器。

这个类的对象是不可改变的。

这个类上的操作会使⽤这个⽤来创建BluetoothDevice类的BluetoothAdapter类执⾏在远程蓝⽛硬件上。

为了获得BluetoothDevice,类,使⽤BluetoothAdapter.getRemoteDevice(String)⽅法去创建⼀个表⽰已知MAC地址的设备(⽤户可以通过带有BluetoothAdapter类来完成对设备的查找)或者从⼀个通过 BluetoothAdapter.getBondedDevices()得到返回值的有联系的设备集合来得到该设备。

注意:需要权限 参见 三、常量String ACTION_ACL_CONNECTED⼴播活动:指明⼀个与远程设备建⽴的低级别(ACL)连接。

总是包含附加域ACL连接通过Android蓝⽛栈⾃动进⾏管理需要权限接收常量值: "android.bluetooth.device.action.ACL_CONNECTED"String ACTION_ACL_DISCONNECTED⼴播活动:指明⼀个来⾃于远程设备的低级别(ACL)连接的断开总是包含附加域ACL连接通过Android蓝⽛栈⾃动进⾏管理需要权限接收常量值: "android.bluetooth.device.action.ACL_DISCONNECTED"String ACTION_ACL_DISCONNECT_REQUESTED⼴播活动:指明⼀个为远程设备提出的低级别(ACL)的断开连接请求,并即将断开连接。

蓝牙的几种应用层协议作用

蓝牙的几种应用层协议作用

蓝牙的几种应用层协议作用蓝牙技术是一种广泛应用于无线通信的短距离通信技术。

它提供了一种方便、快速的方式,使得设备之间可以进行无线通信和数据传输。

为了使蓝牙设备之间可以互相交互和相互理解,蓝牙定义了一套应用层协议,这些协议确保了数据的正确传输和设备之间的有效通信。

本文将介绍蓝牙的几种应用层协议以及它们的作用。

1. SPP(Serial Port Profile,串口协议)SPP是蓝牙技术中最早应用的协议之一,它模拟了串口通信的功能,使得蓝牙设备可以像传统串口一样进行通信。

SPP主要用于传输简单的文本数据和控制命令,例如打印机的指令、传感器数据等。

通过SPP,蓝牙设备可以实现与串口设备的连接,并实现数据的传输和控制。

2. GAP(Generic Access Profile,通用接入协议)GAP是蓝牙中定义的最基本的应用层协议,它规定了设备之间相互可见、可连接的方式以及设备的身份认证等基本功能。

GAP使得蓝牙设备可以相互发现并建立连接,同时还定义了设备之间的加密和认证机制,确保通信的安全性。

GAP广泛应用于蓝牙设备的配对和连接过程中。

3. MAP(Message Access Profile,消息访问协议)MAP是蓝牙中用于消息传输的协议,它允许蓝牙设备之间交换电子邮件、短消息和彩信等消息类型。

通过MAP,用户可以在蓝牙设备之间方便地进行消息的传输和同步,例如在手机和车载系统之间传递短信内容、接收邮件等。

4. A2DP(Advanced Audio Distribution Profile,高级音频分发协议)A2DP是蓝牙中专门用于音频传输的协议,它支持高质量的音频流传输,使得蓝牙设备可以无线传输音乐、语音和其他音频内容。

A2DP广泛应用于蓝牙耳机、汽车音响和家庭音响等设备上,使得用户可以方便地享受高品质的音频体验。

5. HFP(Hands-Free Profile,免提协议)HFP是蓝牙中用于实现免提功能的协议,它支持蓝牙设备与手机之间的通话建立、通话控制和语音传输等功能。

蓝牙开发方案

蓝牙开发方案

蓝牙开发方案蓝牙是一种无线通信技术,广泛应用于各种设备和系统之间的数据传输。

随着智能设备的快速发展,蓝牙技术也逐渐成为现代通信领域中不可或缺的一部分。

本文将介绍一种蓝牙开发方案,旨在帮助开发人员更好地理解和应用蓝牙技术。

一、概述与目标蓝牙开发方案的目标是基于蓝牙技术实现设备之间的无线数据传输和通信。

该方案旨在提供一种简洁、高效、稳定的蓝牙通信解决方案,以满足各种应用场景中的需求。

通过该方案,开发人员可以快速搭建蓝牙通信系统,并进行二次开发和定制。

二、硬件要求1. 蓝牙模块:选择适合项目需求的蓝牙模块,并根据系统架构进行集成。

常见的蓝牙模块包括BLE(低功耗蓝牙)、Classic蓝牙等,开发人员可以根据项目需求选择最合适的蓝牙模块。

2. 主控芯片:选择适合的主控芯片,如ARM Cortex-M系列芯片,以便实现与蓝牙模块的通信和数据处理。

主控芯片需要支持蓝牙协议栈,并提供相应的开发工具和接口。

3. 其他外围设备:根据具体项目需求,可能需要添加其他传感器、存储器、显示器等外围设备,以实现更丰富的功能。

三、软件开发蓝牙开发方案的软件开发部分包括两个主要方面:蓝牙协议栈和应用开发。

1. 蓝牙协议栈开发蓝牙协议栈是蓝牙通信的核心,是实现蓝牙设备之间通信的基础。

开发人员可以选择现有的蓝牙协议栈库,如BlueZ、BTstack等,也可以根据项目需求自行开发蓝牙协议栈。

蓝牙协议栈的开发包括以下几个关键步骤:1) 建立连接:蓝牙设备之间建立连接是蓝牙通信的第一步。

开发人员需要实现设备之间的配对、认证和连接过程,确保通信的安全性。

2) 数据传输:通过蓝牙连接传输数据是蓝牙通信的核心任务。

开发人员需要实现数据的封装和解封装、流量控制、差错校验等功能,确保数据的可靠传输。

3) 服务发现:蓝牙设备之间通信需要事先定义一系列的服务和特征值。

开发人员需要实现服务和特征值的定义和发现过程,实现设备之间的数据交互。

4) 事件处理:蓝牙通信中,各种事件的处理是非常重要的。

蓝牙spp协议

蓝牙spp协议

蓝牙spp协议蓝牙SPP协议。

蓝牙串口协议(SPP)是蓝牙技术中的一种重要协议,它允许设备通过蓝牙无线技术进行串口数据通信。

SPP协议的出现,使得蓝牙设备可以像传统串口连接一样进行数据传输,为各种蓝牙设备的互联互通提供了便利。

本文将介绍蓝牙SPP协议的基本原理、特点和应用。

蓝牙SPP协议是建立在蓝牙基本数据传输协议(RFCOMM)之上的,RFCOMM提供了一种模拟串口通信的方式,使得蓝牙设备可以像串口连接一样进行数据传输。

而SPP协议则是在RFCOMM之上定义了一套标准的串口通信协议,使得不同厂家生产的蓝牙设备可以实现互联互通。

蓝牙SPP协议的特点之一是其简单易用性。

SPP协议定义了一套简洁的数据传输规范,使得开发人员可以很容易地实现蓝牙设备之间的数据通信。

同时,SPP协议也提供了丰富的API接口,方便开发人员进行蓝牙应用程序的开发。

另一个特点是其灵活性。

蓝牙SPP协议支持多种数据传输方式,包括单向传输、双向传输和广播传输等。

这使得SPP协议可以适用于各种不同的应用场景,满足不同设备之间的数据通信需求。

蓝牙SPP协议在各种蓝牙设备之间的应用非常广泛。

例如,在蓝牙打印机、蓝牙扫描仪、蓝牙串口适配器等设备中,都可以看到SPP协议的身影。

通过SPP协议,这些设备可以方便快捷地与手机、平板电脑等蓝牙设备进行数据通信,实现了设备之间的互联互通。

总之,蓝牙SPP协议作为蓝牙串口通信的重要协议,具有简单易用、灵活多样的特点,广泛应用于各种蓝牙设备中。

随着物联网技术的发展,蓝牙SPP协议的应用范围将会进一步扩大,为各种智能设备之间的互联互通提供更加便利的解决方案。

使用React Native进行蓝牙通信开发

使用React Native进行蓝牙通信开发

使用React Native进行蓝牙通信开发一、介绍React Native是一个基于JavaScript的开源框架,可用于跨平台移动应用程序的开发。

蓝牙通信是一种无线通信技术,可以在设备之间进行数据传输。

本文将介绍如何使用React Native进行蓝牙通信开发。

二、准备工作在开始开发之前,需要进行一些准备工作。

首先,确保已经安装了Node.js和React Native的开发环境。

其次,确保你的设备支持蓝牙功能,并且已经打开了蓝牙。

三、创建React Native项目首先,打开终端或命令提示符窗口,进入你想要创建项目的目录。

然后运行以下命令来创建一个新的React Native项目:```npx react-native init BluetoothApp```这将在目录中创建一个名为BluetoothApp的新项目。

四、安装依赖进入项目目录后,运行以下命令来安装蓝牙相关的依赖:```cd BluetoothAppnpm install react-native-ble-managernpm install react-native-ble-plx```这将安装React Native蓝牙管理器和蓝牙插件的依赖。

五、配置Android项目对于Android平台,需要进行一些配置。

首先,打开`android/app/src/main/AndroidManifest.xml`文件,并添加以下权限:```xml<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> ```然后,打开`android/app/build.gradle`文件,并添加以下内容:```gradleimplementation project(':react-native-ble-manager')implementation project(':react-native-ble-plx')```最后,在`android/settings.gradle`文件中添加以下内容:```gradleinclude ':react-native-ble-manager'project(':react-native-ble-manager').projectDir = newFile(rootProject.projectDir, '../node_modules/react-native-ble-manager/android')include ':react-native-ble-plx'project(':react-native-ble-plx').projectDir = newFile(rootProject.projectDir, '../node_modules/react-native-ble-plx/android') ```六、编写蓝牙通信代码首先,打开`App.js`文件并导入所需的模块和组件:```jsximport React, { useEffect } from 'react';import { BleManager } from 'react-native-ble-manager';import { View, Text, Button } from 'react-native';```然后,在函数组件中初始化蓝牙管理器:```jsxconst App = () => {useEffect(() => {BleManager.start({ showAlert: false });}, []);return (<View><Text>蓝牙通信开发</Text>{/* 在这里添加你的蓝牙通信代码 */}</View>);};```接下来,我们可以在`return`语句中添加需要的蓝牙通信代码。

蓝牙通信技术详解

蓝牙通信技术详解

蓝牙通信技术详解
蓝牙通信技术是一种无线通信技术,用于在短距离范围内传输数据。

它采用低功耗的射频技术,可以通过无线方式连接多个设备,并且具有自动搜索和连接的能力。

以下是蓝牙通信技术的一些详细介绍:
1. 工作频段:蓝牙通信技术使用
2.4 GHz的ISM频段进行无线通信,这个频段是全球范围内都可以自由使用的。

2. 描述符和协议:蓝牙通信技术定义了一种层次结构,用于描述设备之间的通信协议和数据格式。

这种层次结构包括物理层、链路层、网络层和应用层。

3. 传输速率:蓝牙通信技术的传输速率取决于使用的通信规范。

当前常用的蓝牙版本是蓝牙
4.2和蓝牙5,传输速率可以达到2 Mbps(蓝牙5)或1 Mbps(蓝牙4.2)。

4. 通信距离:蓝牙通信技术的通信距离通常在10米左右,但可以根据环境和设备的功率进行调整。

蓝牙5的低功耗特性使得它能够实现更远的通信距离。

5. 安全性:蓝牙通信技术采用了多种安全机制来保护通信数据的安全性。

例如,蓝牙设备可以使用配对码来建立安全连接,并使用加密算法对数据进行加密。

6. 应用领域:蓝牙通信技术广泛应用于各种消费电子产品和工业领域。

例如,蓝牙耳机、蓝牙音箱、蓝牙键盘、蓝牙手表等都是蓝牙通信技术的应用。

除了个人消费电子产品,蓝牙通信技术还被广泛应用于汽车、医疗、物联网等领域。

总的来说,蓝牙通信技术是一种方便、可靠且低功耗的无线通信技术,适用于各种短距离通信场景。

它通过自动搜索和连接的功能,使多个设备之间可以方便地进行数据传输。

蓝牙中文API文档(1)

蓝牙中文API文档(1)

蓝牙是一种低成本、短距离的无线通信技术。

对于那些希望创建个人局域网(PANs)的人们来说,蓝牙技术已经越来越流行了。

每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA等设备提供了自动连接和即时共享数据的能力。

为了在Java平台上开发支持蓝牙技术的软件,JCP定义了JSR82标准--Java蓝牙无线技术APIs(JABWT)。

在这篇文章中,我将介绍一些关于蓝牙技术的背景,概述一下支持蓝牙技术的MIDlet应用程序的典型要素,然后介绍给你核心的Java蓝牙APIs。

最后我们展示一些代码来演示如何使用这些APIs。

实际上JSR82定义了两个独立的可选包:核心蓝牙API和对象交换(OBEX)API。

这篇文章将对这两个中更为普遍的部分--核心蓝牙包javax.bluetooth进行详细地阐述,而OBEX API(对象交换),我们留到以后去讨论。

背景篮牙技术由蓝牙兴趣小组发展,其包括:.无线电技术.协议栈.互操作性profiles蓝牙无线电技术基于在工业、科学以及医学(ISM)上公用的2.45GHz开放频段,这一频段无需授权并全球通用。

当蓝牙设备互相连接时,他们将组成一个微微网(piconet),即以一个主设备和最大7个从设备的形式动态创建网络。

蓝牙也支持piconet网之间的连接:当一个piconet中的主设备成为另一个piconet 的从设备时,piconet与piconet间将形成桥接。

蓝牙协议栈提供了一组的高层协议和API以完成发现服务和模拟串行I/O,还有一个关于包分割和重组的低层协议以及多路技术协议和质量服务。

蓝牙互操作性profiles--不要与J2ME profiles搞混--它是用来描述跨平台互操作性和一致性需求的。

蓝牙互操作性profiles包括三方面内容:通用访问profile (GAP)定义了设备管理功能性;服务发现应用profiles定义了服务发现方面的内容,串口profiles定义了互操作设备和模拟串口电缆的能力。

蓝牙通信技术PPT课件

蓝牙通信技术PPT课件

4.2 蓝牙技术协议体系结构
• 英特网协议:该部分协议包括点对点协议、 网际协议、传输控制协议和用户数据报协议 等,用于实现蓝牙设备的拨号上网,或通过 网络接入点访问Internet和本地局域网。
• WAP(Wireless Application Protocol)是无线 应用协议,在数字蜂窝电话和其他小型无线 设备上实现因特网业务是其目的。它支持移 动电话浏览网页、收取电子邮件和其他基于 因特网的协议。
• 蓝牙技术规范的目的是使符合该规范的各种 设备应用之间能够互通,这就要求本地设备 与远端设备使用相同的协议,不同的应用需 要不同的协议,但所有的应用都要使用蓝牙 技术规范中的软件层和硬件层。
4.2 蓝牙技术协议体系结构
• 蓝牙协议采用分层结构,遵循开放系统互连 参考模型。该模型从低到高分别是:物理层、 数据链路层、网络层、传输层、会话层、表 示层和应用层
4.2 蓝牙技术协议体系结构
4.2.3 高端应用层 • 高端应用层位于蓝牙协议栈的最上部分,是
由选用协议层组成的。该层是指那些位于蓝 牙协议堆栈之上的应用软件和其中所涉及的 协议,即蓝牙应用程序,由开发上层各种通 信诸如拨号上网和语音通信等驱动。
4.2 蓝牙技术协议体系结构
• OBEX(Object Exchange Protocol)是对象交 换协议,它支持设备间的数据交换,采用客 户/服务器模式提供与(超文本传输协议)相同 的基本功能。该协议作为一个开放性标准, 还定义了可用于交换的电子商务卡、个人日 程表、消息和便条等格式。扫描态来自广播态就绪态发起态
连接态
4.2 蓝牙技术协议体系结构
4.2.2 中间协议层 • 在蓝牙逻辑链路上工作,中间协议层为高层
应用协议或程序提供了必要的支持,为上层 应用提供了各种不同的标准接口。 • 串口仿真协议(RFCOMM)是一个仿真有线 链路的无线数据仿真协议,提供了对 RS232串行接口的仿真,为建立在串口之上的 传统应用提供接口环境,符合欧洲典型标准 化规定的TS 07.10串口仿真协议,并且针对 蓝牙的实际应用情况作了修改。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蓝牙是一种低成本、短距离的无线通信技术。

对于那些希望创建个人局域网(PANs)的人们来说,蓝牙技术已经越来越流行了。

每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA等设备提供了自动连接和即时共享数据的能力。

为了在Java平台上开发支持蓝牙技术的软件,JCP定义了JSR82标准--Java蓝牙无线技术APIs(JABWT)。

在这篇文章中,我将介绍一些关于蓝牙技术的背景,概述一下支持蓝牙技术的MIDlet应用程序的典型要素,然后介绍给你核心的Java蓝牙APIs。

最后我们展示一些代码来演示如何使用这些APIs。

实际上JSR82定义了两个独立的可选包:核心蓝牙API和对象交换(OBEX)API。

这篇文章将对这两个中更为普遍的部分--核心蓝牙包javax.bluetooth进行详细地阐述,而OBEX API(对象交换),我们留到以后去讨论。

蓝牙无线电技术基于在工业、科学以及医学(ISM)上公用的2.45GHz开放频段,这一频段无需授权并全球通用。

当蓝牙设备互相连接时,他们将组成一个微微网(piconet),即以一个主设备和最大7个从设备的形式动态创建网络。

蓝牙也支持piconet网之间的连接:当一个piconet中的主设备成为另一个piconet的从设备时,piconet与piconet间将形成桥接。

蓝牙协议栈提供了一组的高层协议和API以完成发现服务和模拟串行I/O,还有一个关于包分割和重组的低层协议以及多路技术协议和质量服务。

蓝牙互操作性profiles--不要与J2ME profiles搞混--它是用来描述跨平台互操作性和一致性需求的。

蓝牙互操作性profiles包括三方面内容:通用访问profile(GAP)定义了设备管理功能性;服务发现应用profiles定义了服务发现方面的内容,串口profiles定义了互操作设备和模拟串口电缆的能力。

你可以通过蓝牙规范(Bluetooth specification)学习这些和其它的profiles。

蓝牙栈包含一个软件栈来映射一个固件栈(firmware),由图1所示:图片1:蓝牙协议栈JSR82揭示了蓝牙软件栈给Java平台的开发者。

其中引起我们兴趣的是服务发现协议(SDP),用来模拟串口的串口profile RFCOMM,向上层协议提供诸如分割和重组等导向性连接的数据转换操作的逻辑链路控制及适配profile (L2CAP),以及多路技术协议。

注意JABWT不支持无连接L2CAP。

JABWT也包括对象交换API。

OBEX也是高层API,它用来交换对象数据,诸如电子商业卡和日历标签之间以vCard和vCalendar的格式进行数据传输。

在蓝牙上,对象交换通过RFCOMM发生。

OBEX在最开始时是由红外(IrDA)引入的,并且它可以在IrDA协议、TCP/IP或者是其他协议的顶层实现。

典型的蓝牙应用程序实例一个开启蓝牙功能的应用可以作为一个服务端或是一个客户端--一个服务的提供者或是消费者,或者它可以作为一个真正的点对点终端同时表现出服务和客户的行为。

图2所示一个蓝牙规范用例:图2:一个典型的具有蓝牙功能的实际用例对这些用例的简要介绍:.初始化--所有具备蓝牙功能的应用程序必须先要初始化蓝牙栈。

.客户端--一个客户对远端服务进行消费。

首先它要发现所有附近的设备,然后对于每一个发现的设备搜索它感兴趣的服务。

.服务器端--一个为客户端提供服务的服务器。

它在服务发现数据库(SDDB)中对客户端进行注册,对他们进行有效广播。

然后等待引入的连接,在他们进入时接受他们并为他们提供服务。

最后,当不再需要服务时,应用程序会在服务发现数据库(SDDB)中将他们移除。

图三:用例中参与活动的图表:图3:蓝牙应用程序活动图蓝牙应用程序中的元素图4显示了在MIDlet中一个典型蓝牙功能应用程序中的一些元素:图4:具有蓝牙功能的MIDlet(高端组织)中间的是核心应用程序My Bluetooth MIDlet,它扩展自javax.microedition.midlet.MIDlet。

没有显示出来的还有MIDlet中实现的mandListener以监听从用户接口中输入的命令。

应用程序使用的剩余的类和接口都包含在了蓝牙规范中,像设备发现和服务,连接和服务消费,还有广播和提供服务。

使用诸如MVC等设计模式是很好的实践。

MVC把应用程序分解成用户接口(视图),应用程序行为和导航(控制器),以及数据(模型),当然在我们的案例中还要加上蓝牙API的支撑类和接口。

像将分离的客户端、服务端行为构建成独立的类以便以后可以重用这些组件,也是很好的设计。

Java蓝牙API核心概述JSR82需求的"最小公分母"是受限连接设备配置(CLDC),可靠连接设备配置(CDC)是CLDC的超集,所以JABWT可以同时在CLDC和CDC上实现,简要地说,你可以在使用任何J2ME profile的上使用JABWT。

在javax.bluetooth中我们可以发现,Java蓝牙API可以被分解为三个部分,在下面我们将讨论到它们:发现、设备管理和通信。

蓝牙发现API客户端程序使用蓝牙发现API以搜索在其附近的设备和服务。

服务代理类(DiscoveryAgent)同时支持设备与服务的发现。

当设备和服务被发现时,想得到通知的客户端应用程序必须实现并注册DiscoveryListener接口,这个接口定义了设备发现通知和服务发现通知的回调。

发现代理(DiscoveryAgent)与蓝牙客户端应用程序之间是典型的一对一的关系:图5:DiscoveryAgent类和DiscoveryListener接口设备发现API你使用DiscoveryAgent类的"设备发现"方法来开始和取消设备发现:.retrieveDevices()重新获得已经发现或者附近的已知设备.startInquiry()启动发现附近设备,也叫inquiry.cancelInquiry()取消当前进行的任何请求蓝牙发现代理在请求阶段的不同时候会分别调用DiscoveryListener(发现监听器)不同的回调方法:.deviceDiscovered()指出是否有设备被发现。

.inquiryCompleted()指出是否请求已经成功、触发一个错误或已被取消。

在图6中的状态图表阐明了设备发现的状态改变结束于相应的回调方法的返回。

图6:设备发现状态表设备发现以调用startInquiry()函数开始。

在请求进行时,蓝牙发现代理会在适当的时候调用回调方法DeviceDiscovered()和inquiryCompleted()。

服务发现API你可以使用发现代理的服务发现方法来开始或取消服务发现:.selectService()启动服务发现搜索。

(根据API手册应为尝试定位一个服务).searchServices()启动服务发现搜索。

.cancelServiceSearch()取消在正在进行中的任何的服务发现搜索操作。

蓝牙发现代理在服务发现阶段的不同时候会分别调用DiscoveryListener的服务发现回调方法:.servicesDiscovered()表示是否服务已被发现。

.serviceSearchCompleted()表示服务发现是否已经完成。

图7阐明了服务发现的状态改变结束于DiscoveryListener的回调方法的返回。

图7:服务发现状态图表服务发现开始于对searchServices()的调用。

当服务搜索进行时,蓝牙发现代理会在适当的时候回调servicesDiscovered()和serviceSearchCompleted()方法。

除了DiscoveryAgent和DiscoveryListener了,你在服务发现过程中还要使用到的类有UUID,ServiceRecord以及DataElement等。

UUID类在蓝牙中,每个服务和服务属性都唯一地由"全球唯一标识符"(UUID)来校验。

正如它的名字所暗示的,每一个这样的标识符都要在时空上保证唯一。

UUID类可表现为短整形(16或32位)和长整形(128位)UUID。

他提供了分别利用String和16位或32位数值来创建类的构造函数,提供了一个可以比较两个UUID(如果两个都是128位)的方法,还有一个可以转换一个UUID为一个字符串的方法。

UUID实例是不可改变的(immutable),只有被UUID标示的服务可以被发现。

在Linux下你用一个命令uuidgen-t可以生成一个UUID值;在Windows 下则执行命令uuidgen。

UUID看起来就像如下的这个形式:2d266186-01fb-47c2-8d9f-10b8ec891363。

当使用生成的UUID去创建一个UUID对象,你可以去掉连字符。

SDDB和ServiceRecord接口在服务发现的中心是服务发现数据库(SDDB)和服务发现协议(SDP)。

SDDB由蓝牙实现负责维护的数据库。

它包含了服务记录(service records),后者代表了对客户端有效的服务。

SDP对于基于JABWT应用程序来说是透明的;可以这么说,SDP是用于服务发现的。

为重新获取服务纪录,一个本地设备SDP客户端会向一个远端设备上SDP服务器发出请求。

图8:SDDB每一笔服务记录都会由一个ServiceRecord的实例来表现。

这个记录包含了描述服务细节的属性。

这个类提供了几种有用的方法:.getAttributeIDs()和getAttributeValue()方法返回服务记录的属性。

.getConnectionURL()方法获取链接的URL数据元素类一个服务可以有许多的属性,一些是强制性的,其他的是可选的。

一个服务属性由一个数据元素对象来表现,这个数据元素对象提供了设置并取得属性值的方法。

强制性属性是在注册一个服务之后被自动设定的。

这些属性包括:ServiceRecordHandle,ServiceClassIDList,ServiceRecordState,ServiceID,还有ProtocolDescriptorList。

如果你想要的话,还可以设置可选属性。

可选属性有很多,但是有三个值得关注:ServiceName,ServiceDescription,和ProviderName。

想得到更多的关于这些属性的信息,请参看JABWT的文档或蓝牙规范。

设备管理API有3个主要的类来支持设备管理:.LocalDevice.RemoteDevice.DeviceClass本地设备类LocalDevice类标识了本地蓝牙设备。

蓝牙应用程序和LocalDevice之间的关系是典型的一对一关系:图10:本地设备类本地设备提供了方法来返回关于本地设备的信息,并且能够进入Bluetooth manager:.getBluetoothAddress()返回蓝牙设备地址。

相关文档
最新文档