使用JAVA蓝牙无线通讯技术API
- 格式:pdf
- 大小:447.06 KB
- 文档页数:13
嵌入式技术应用实践实习报告(蓝牙)通信工程龚惠祯121041A班121041109一、学习目的了解处理器的发展掌握WinCE嵌入式系统开发方法和开发流程。
掌握WinCE嵌入式C#编程方法。
掌握WinCE嵌入式网络通信技术。
掌握Bluetooth编码技术二、嵌入式系统(一)什么是嵌入式系统:●嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
●它是完成特定任务的计算机系统。
嵌入式系统一般由硬件设备、嵌入式操作系统、嵌入式应用软件组成。
(二)嵌入式系统的特点传统PC机是面向个人的一个通用操作平台,而嵌入式计算机系统是面向专业设备的一个特定平台。
专用性:面向特定用户和特定行业的高效简洁性:对嵌入式系统设备的软件和硬件能够进行裁剪和定制。
高可靠和低能耗性:保证嵌入式系统设备运行安全可靠、实时操作和较低的耗电量。
自身特殊性:所需的软件需要在特定的开发环境中进行定制开发。
三、PC上模拟运行WinCE(一)实验目的✧ 熟悉Windows CE 6.0的开发环境✧ 掌握新建Windows CE 6.0平台的方法✧ 了解模拟器的工作原理及用途(二)实验设备1) 硬件:✧ PC机一台2) 软件:✧ Visual Studio 2005✧ Windows CE 6.0(三)实验原理模拟器(Emulator)是Windows CE开发一直以来被广大开发人员所使用的一个软件工具,它是在X86架构的开发机上模拟X86或者ARM的处理器。
开发人员可以利用这个工具来测试编译生产的映像或者应用程序,虽然模拟器和真实设备还有一定的区别,有时候会出现在模拟器上运行很好的程序,在真实设备上却不能运行或者运行出错的情况,但是可以肯定的是,模拟器可以为开发人员节约很多时间。
在安装了Windows CE 6.0之后会默认安装好Emulator的BSP包,可以直接使用而不用额外安装。
蓝牙开发方案蓝牙是一种无线通信技术,广泛应用于各种设备和系统之间的数据传输。
随着智能设备的快速发展,蓝牙技术也逐渐成为现代通信领域中不可或缺的一部分。
本文将介绍一种蓝牙开发方案,旨在帮助开发人员更好地理解和应用蓝牙技术。
一、概述与目标蓝牙开发方案的目标是基于蓝牙技术实现设备之间的无线数据传输和通信。
该方案旨在提供一种简洁、高效、稳定的蓝牙通信解决方案,以满足各种应用场景中的需求。
通过该方案,开发人员可以快速搭建蓝牙通信系统,并进行二次开发和定制。
二、硬件要求1. 蓝牙模块:选择适合项目需求的蓝牙模块,并根据系统架构进行集成。
常见的蓝牙模块包括BLE(低功耗蓝牙)、Classic蓝牙等,开发人员可以根据项目需求选择最合适的蓝牙模块。
2. 主控芯片:选择适合的主控芯片,如ARM Cortex-M系列芯片,以便实现与蓝牙模块的通信和数据处理。
主控芯片需要支持蓝牙协议栈,并提供相应的开发工具和接口。
3. 其他外围设备:根据具体项目需求,可能需要添加其他传感器、存储器、显示器等外围设备,以实现更丰富的功能。
三、软件开发蓝牙开发方案的软件开发部分包括两个主要方面:蓝牙协议栈和应用开发。
1. 蓝牙协议栈开发蓝牙协议栈是蓝牙通信的核心,是实现蓝牙设备之间通信的基础。
开发人员可以选择现有的蓝牙协议栈库,如BlueZ、BTstack等,也可以根据项目需求自行开发蓝牙协议栈。
蓝牙协议栈的开发包括以下几个关键步骤:1) 建立连接:蓝牙设备之间建立连接是蓝牙通信的第一步。
开发人员需要实现设备之间的配对、认证和连接过程,确保通信的安全性。
2) 数据传输:通过蓝牙连接传输数据是蓝牙通信的核心任务。
开发人员需要实现数据的封装和解封装、流量控制、差错校验等功能,确保数据的可靠传输。
3) 服务发现:蓝牙设备之间通信需要事先定义一系列的服务和特征值。
开发人员需要实现服务和特征值的定义和发现过程,实现设备之间的数据交互。
4) 事件处理:蓝牙通信中,各种事件的处理是非常重要的。
蓝牙打印源码实例蓝牙技术的出现,使得无线通信的应用得以快速发展。
蓝牙打印是蓝牙技术的一种重要应用,它使得我们可以通过蓝牙连接打印机,实现无线打印。
在本文中,我们将介绍蓝牙打印的源码实例。
蓝牙打印的源码实例主要涉及两个方面:蓝牙连接和打印机控制。
首先,我们需要建立蓝牙连接,以便与打印机进行通信。
在Android平台上,可以通过BluetoothAdapter类来实现蓝牙连接。
首先,我们需要获取设备的蓝牙适配器,然后打开蓝牙功能,接着搜索周围的蓝牙设备,并与目标设备建立连接。
以下是一个简单的蓝牙连接的源码实例:```javaBluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (bluetoothAdapter == null) {// 设备不支持蓝牙return;}if (!bluetoothAdapter.isEnabled()) {// 蓝牙未开启,需要请求用户开启蓝牙Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);}Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();if (pairedDevices.size() > 0) {for (BluetoothDevice device : pairedDevices) {if (device.getName().equals("打印机名称")) {// 找到目标打印机,建立蓝牙连接ConnectThread connectThread = new ConnectThread(device);connectThread.start();break;}}}```上述代码首先获取默认的蓝牙适配器,然后检查设备是否支持蓝牙功能。
AUTOCALL AND PROXIMITY PAIRING iWRAP APPLICATION NOTESaturday, 09 June 2012Version 1.8Copyright © 2000-2012 Bluegiga TechnologiesAll rights reserved.Bluegiga Technologies assumes no responsibility for any errors which may appear in this manual. Furthermore, Bluegiga Technologies reserves the right to alter the hardware, software, and/or specifications detailed here at any time without notice and does not make any commitment to update the information contained here. Bluegiga’s products are not aut horized for use as critical components in life support devices or systems.The WRAP, Bluegiga Access Server, Access Point and iWRAP are registered trademarks of Bluegiga Technologies.The Bluetooth trademark is owned by the Bluetooth SIG Inc., USA and is licensed to Bluegiga Technologies. All other trademarks listed herein are owned by their respective owners.VERSION HISTORYTABLE OF CONTENTS1Introduction (5)1.1Inquiry and Pairing (6)2Using Autocall with iWRAP (7)3Using Autopair with iWRAP (9)4References (11)5Contact Information (12)iWRAP® Embedded Bluetooth Stack OverviewiWRAP is an embedded firmware running entirely on the RISC processor of WT12, WT11, WT41 and WT32 modules. It implements the full Bluetooth protocol stack and many Bluetooth profiles as well. All software layers, including application software, run on the internal RISC processor in a protected user software execution environment known as a Virtual Machine (VM).The host system can interface to iWRAP firmware through one or more physical interfaces, which are also shown in the figure below. The most common interfacing is done through the UART interface by using the ASCII commands that iWRAP firmware supports. With these ASCII commands, the host can access Bluetooth functionality without paying any attention to the complexity, which lies in the Bluetooth protocol stack. GPIO interface can be used for event monitoring and command execution. PCM, SPDIF, I2S or analog interfaces are available for audio. The available interfaces depend on the used hardware.The user can write application code to the host processor to control iWRAP firmware using ASCII commands or GPIO events. In this way, it is easy to develop Bluetooth enabled applications.On WT32 there is an extra DSP processor available for data/audio processing.HardwareFigure 1: iWRAP Bluetooth stack1 IntroductionThis application note discusses the Autopair and Autocall features of the iWRAP Software. Both features can be enabled/disabled through iWRAP Command interface and are useful is setting up automatic pairing and connection with remote Bluetooth devices with a known device address1.1 Inquiry and PairingFor autocall functionality to be used, the INQUIRY command needs to be first issued by the host wishing to make an automatic pairing with the remote device. This command can be skipped if the remote Bluetooth device is already paired with the Bluegiga module. For further detail of the INQUIRY command, please refer to the iWRAP User Guide.So we have discovered a device named “R2-D4” with the MAC or Bluetooth Address 00:07:80:65:d9:c2. Our next step is to intiate connection pairing from the module to a remote device. To do this, the module must be configured with Secured Simple Pairing (if connecting to a Bluetooth 2.1 + EDR remote device).legacy four digit pairing code,reset and then initiate a RFCOMM connection to the remote device. Please refer to the iWRAP User Guide for more info about Sectured Simple Pairing parameters.At this point, the iWRAP firmware in the module is ready and is bonded with the remote device. Next section we shall setup AUTOCALL functionality to a remote device. The Bluetooth profile we will use for autocall feature is HSP. A common use case would be a headset which automatically calls over a regular interval to a mobile phone in case the Bluetooth connection is lost between them.2 Using Autocall feature in iWRAPOne of the many important features which has been integrated into iWRAP is the Autocall command. With Autocall enabled, the Bluegiga module is able to re-establish a broken connection at periodic interval. This is useful for example when the application needs to have a persistent connection to the remote device. For exemplary purposes, let’s consider a situation w here the remote device is a mobile phone and a Bluetooth headset which automatically establishes a HSP audio connection when either turned on or when returned in the range of the mobile phone.MobilePhoneSET AUTOCALL TO CONNECT TO MOBILE INCASE THERE IS CONNECTION DROPFigure 2: A sample AUTOCALL use caseConsidering the module to be the Bluetooth headset, the following commands needs to be issued so that iWRAP is configured with HFP. Please refer to HFP/HSP Application Note for further details and info of commands.Now that we have set the module to act as Bluetooth Headset, we can look into having it calling the remote device (mobile phone) automatically at regular intervals when the connection is lost. Please keep in mind that if there are multiple devices paired t o the module’s memory an inquiry is made(which is transparent to the user) and the first paired device found in this transparent inquiry is re-connected. Please also note if autocall is enabled no manual “CALL” should be issued through iWRAP by the host.In the above case, iWRAP was configured to make an Autocall connection to a specific UUID with a 7000 millisecond timeout. Please note the UUID is tied to the profile which in this case is the HFP-AG. The Audio Gateway is the mobile phone. Once the autocall command is issue, the remote device will be asked to give permission to have the module connect to it. In the event of any disconnection such as power cycle of the module and or loss of connection the module will automatically call the phone to connect as a Hands Free unit. Please see below where iWRAP was made to reset/power cycle and an automatic connection was made to the phone.To disable AUTOCALL feature simply issue “SET CONTROL AUTOCALL” and reset the module.3 Using Autopair feature in iWRAPThe Autopair command in iWRAP is a good feature to use in cases where remote device proximity can be used utilised for advertising campaigns. When this function is enabled, iWRAP automatically tries to pair with devices it finds in the inquiry using multiple PIN codes. Autopair feature can be used in conjunction with Autocall and together it is possible to make a specific function targeted to a specific application.This sets iWRAP to do an inquiry every 25 seconds with a 5 second timeout using pin codes “1234” and “0000”. Please note that the interval and timeout value are in the units of 1.28 seconds and hence are therefore multiples of that time. The command output below from iWRAP during scheduled enquiries should be as below.Please note different remote devices need to be set with different pairing mechanism. Depending on the remote device’s IO capability a particular pairi ng needs to be set. Please refer to the table which lists these capabilities of the remote device iWRAP User Guide under SET BT SSP command description.3.1 SET BT FILTERA sample use case would be to use Autopair and Autocall function to pair and connect to remote devices automatically but there could be multiple Bluetooth radios in the discovery zone. Inorder to pair and connect to only the device which is targeted to be used, the SET BT FILTER command can be invoked for such scenarios.In this case, iWRAP will only try to filter out devices which are RSSI value of -30 and above during inquiry. The filter can also be made to filter out on the COD and/or Remote device MAC address. With a combination of these parameters, automatic calling and pairing with the exact target device can be achieved. Please refer to iWRAP User guide for more detail on more parameters.4 References[1] The Bluetooth SIG, Hands-Free Profile overview, URL:/Bluetooth/Technology/Works/HFP.htm[2] The Bluetooth SIG, Headset Profile overview, URL:/Bluetooth/Technology/Works/HSP.htm5 Contact InformationSales:******************Technical support:********************/techforum/ Orders: *******************Head Office / Finland:Phone: +358-9-4355 060Fax: +358-9-4355 0660Street Address:Sinikalliontie 5A02630 ESPOOFINLANDPostal address:P.O. BOX 12002631 ESPOOFINLANDSales Office / USA:Phone: (770) 291 2181Bluegiga Technologies, Inc.3235 Satellite Blvd, Building 400, Suite 300Atlanta, GA 30096。
使用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`语句中添加需要的蓝牙通信代码。
蓝牙方案开发蓝牙方案开发简介蓝牙技术是一种无线通信技术,旨在通过短距离通信连接各种设备。
蓝牙方案开发是为特定应用场景和需求开发定制的蓝牙解决方案。
本文将介绍蓝牙方案开发的基本流程和注意事项。
蓝牙方案开发流程确定需求在开始蓝牙方案开发之前,首先需要明确开发的目标和需求。
根据不同的应用场景和功能要求,确定蓝牙技术的使用场景、通信方式、数据传输需求等。
硬件选择根据需求确定适合的硬件平台。
常见的硬件平台包括蓝牙模块、开发板和嵌入式系统等。
根据需求选择合适的硬件设备,并确保其支持所需的蓝牙技术和功能。
软件开发蓝牙方案开发的核心是软件开发。
根据需求,使用合适的开发工具和编程语言进行软件开发。
常用的蓝牙开发工具包括蓝牙协议栈和蓝牙开发套件,常用的编程语言包括C/C++、Java和Python等。
在软件开发过程中,需要进行蓝牙协议栈的配置、蓝牙主机和从机的开发、数据传输和通信协议的实现等。
软硬件集成在软件开发完成后,需要将软件与硬件进行集成。
这包括将软件烧录到硬件设备中、调试和优化软硬件的兼容性、测试和验证蓝牙通信功能等。
测试和验证在蓝牙方案开发完成后,需要进行测试和验证。
这包括功能测试、性能测试、兼容性测试等。
通过测试和验证,确保蓝牙方案开发符合预期的需求和质量标准。
产品发布在测试和验证通过后,蓝牙方案开发完成并准备发布。
产品发布包括准备产品文档、用户指南、固件升级等。
确保产品的发布和推广可以顺利进行。
注意事项蓝牙技术的选择在蓝牙方案开发之前,需要对不同的蓝牙技术进行了解和选择。
根据需求和应用场景,选择适合的蓝牙技术版本。
同时,还需要考虑蓝牙的功耗、传输速率、通信距离等特性。
安全性和隐私保护蓝牙方案开发中,安全性和隐私保护是非常重要的。
需要采取合适的安全措施,保护数据传输的安全性和用户的隐私。
兼容性和互操作性在蓝牙方案开发过程中,需要考虑兼容性和互操作性。
确保蓝牙方案与不同厂商和设备间的互操作性,以及与已有蓝牙设备的兼容性。
手机蓝牙编程简介分类:JavaME2010-06-04 13:55 931人阅读评论(3) 收藏举报手机蓝牙编程简介一、什么是蓝牙技术蓝牙是一种低成本、短距离的无线通信技术。
对于那些希望创建个人局域网(PANs )的人们来说,蓝牙技术已经越来越流行了。
每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA 等设备提供了自动连接和即时共享数据的能力。
为了在Java 平台上开发支持蓝牙技术的软件,JCP 定义了JSR82 标准--Java蓝牙无线技术APIs(JABWT) 。
当蓝牙设备互相连接时,他们将组成一个微微网(piconet ),即以一个主设备和最大7 个从设备的形式动态创建网络。
蓝牙也支持piconet 网之间的连接:当一个piconet 中的主设备成为另一个piconet 的从设备时,piconet 与piconet 间将形成桥接。
二、蓝牙协议栈蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 Object Exchange (OBEX ),在设备之间发送和接收文件。
如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。
反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。
图 1 显示了协议栈的细节。
图1 蓝牙协议栈,如下:∙栈的最底层是 HCI ,即主机控制器接口(Host Controller Interface )。
这一层顾名思义就是主机(计算机)和控制器(蓝牙设备)之间的接口。
可以看到,其他所有的层都要经过 HCI 。
∙HCI 上面的一层是L2CAP ,即逻辑链接控制器适配协议(Logical Link Controller Adaptation Protocol )。
这一层充当其他所有层的数据多路复用器。
∙接下来一层是 BNEP ,即蓝牙网络封装协议(Bluetooth Network Encapsulation Protocol )。
科技与创新┃Science and Technology&Innovation ·152·2023年第20期文章编号:2095-6835(2023)20-0152-03基于JAVA的共享蓝牙耳机小程序设计*丁玉青,孙逸飞,朱敏(安徽三联学院电子电气工程学院,安徽合肥230601)摘要:伴随着科技进步,手机已经成为现代人生活中不可缺少的设备,语音电话、刷视频、听音乐、学习工作等都离不开手机。
作为手机的伴生产品,耳机也成为了大多数人出行的标配。
耳机是对外界声音的隔绝,也是人们沟通心灵的工具,能自由选择聆听各种声音。
由于蓝牙耳机小巧,导致耳机的电量不足以支撑一天,因此需要随身携带充电电源,非常不便,为此设计了一款基于微信小程序的蓝牙耳机共享系统,让使用者无需随身携带蓝牙耳机。
考虑到卫生问题,系统也会给用户配备一次性耳套和酒精消毒纸巾,通过建立微信小程序,投放耳机柜,以租赁的方式运营,投入到商场、车站、图书馆等公共场合,为所有手机使用者提供便利的租赁橱柜。
关键词:JAV A;微信小程序;共享;蓝牙耳机中图分类号:TP311.1文献标志码:A DOI:10.15913/ki.kjycx.2023.20.047蓝牙耳机已成为大多数人出行的标配,它将蓝牙技术应用在免持耳机上,让使用者可以免除恼人电线的牵绊,以各种方式轻松高效地生活。
但由于蓝牙耳机体积较小且电量有限,因此往往会出现耳机没带或者没电的情况,影响人们的生活习惯或工作效率,十分不便。
针对此问题,为了实现蓝牙耳机的共享小程序,通过投放耳机租赁柜,以租售的方式给用户提供蓝牙耳机租售服务,投入到商场、车站、图书馆等公共场合,让需求者无需随身携带蓝牙耳机也可以实现“耳机自由”。
同时,考虑到卫生问题,系统也会给用户配备一次性耳套和酒精消毒纸巾。
目前共享平台主要通过微信小程序和APP实现,但是由于技术局限,开发独立的APP平台时,开发成本、运营维护、版本迭代等都是需要解决的难题。
使用Java蓝牙无线通讯技术API(第一部分-API概览)蓝牙是一种低成本、短距离的无线通信技术。
对于那些希望创建个人局域网(PANs)的人们来说,蓝牙技术已经越来越流行了。
每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA等设备提供了自动连接和即时共享数据的能力。
为了在Java平台上开发支持蓝牙技术的软件,JCP定义了JSR82标准--Java蓝牙无线技术APIs(JABWT)。
在这篇文章中,我将介绍一些关于蓝牙技术的背景,概述一下支持蓝牙技术的MIDlet 应用程序的典型要素,然后介绍给你核心的Java蓝牙APIs。
最后我们展示一些代码来演示如何使用这些APIs。
实际上JSR82定义了两个独立的可选包:核心蓝牙API和对象交换(OBEX)API。
这篇文章将对这两个中更为普遍的部分--核心蓝牙包javax.bluetooth进行详细地阐述,而OBEX API(对象交换),我们留到以后去讨论。
1、背景篮牙技术由蓝牙兴趣小组发展,其包括:.无线电技术.协议栈.互操作性profiles蓝牙无线电技术基于在工业、科学以及医学(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所示一个蓝牙规范用例:图2:一个典型的具有蓝牙功能的实际用例对这些用例的简要介绍:.初始化--所有具备蓝牙功能的应用程序必须先要初始化蓝牙栈。
.客户端--一个客户对远端服务进行消费。
首先它要发现所有附近的设备,然后对于每一个发现的设备搜索它感兴趣的服务。
.服务器端--一个为客户端提供服务的服务器。
它在服务发现数据库(SDDB)中对客户端进行注册,对他们进行有效广播。
然后等待引入的连接,在他们进入时接受他们并为他们提供服务。
最后,当不再需要服务时,应用程序会在服务发现数据库(SDDB)中将他们移除。
图三:用例中参与活动的图表:图3:蓝牙应用程序活动图3、蓝牙应用程序中的元素图4显示了在MIDlet中一个典型蓝牙功能应用程序中的一些元素:图4:具有蓝牙功能的MIDlet(高端组织)中间的是核心应用程序My Bluetooth MIDlet,它扩展自javax.microedition.midlet.MIDlet。
没有显示出来的还有MIDlet中实现的mandListener以监听从用户接口中输入的命令。
应用程序使用的剩余的类和接口都包含在了蓝牙规范中,像设备发现和服务,连接和服务消费,还有广播和提供服务。
使用诸如MVC等设计模式是很好的实践。
MVC把应用程序分解成用户接口(视图),应用程序行为和导航(控制器),以及数据(模型),当然在我们的案例中还要加上蓝牙API 的支撑类和接口。
像将分离的客户端、服务端行为构建成独立的类以便以后可以重用这些组件,也是很好的设计。
4、Java蓝牙API核心概述JSR82需求的"最小公分母"是受限连接设备配置(CLDC),可靠连接设备配置(CDC)是CLDC的超集,所以JABWT可以同时在CLDC和CDC上实现,简要地说,你可以在使用任何J2ME profile的上使用JABWT。
在javax.bluetooth中我们可以发现,Java蓝牙API可以被分解为三个部分,在下面我们将讨论到它们:发现、设备管理和通信。
5、蓝牙发现API客户端程序使用蓝牙发现API以搜索在其附近的设备和服务。
服务代理类(DiscoveryAgent)同时支持设备与服务的发现。
当设备和服务被发现时,想得到通知的客户端应用程序必须实现并注册DiscoveryListener接口,这个接口定义了设备发现通知和服务发现通知的回调。
发现代理(DiscoveryAgent)与蓝牙客户端应用程序之间是典型的一对一的关系:图5:DiscoveryAgent类和DiscoveryListener接口6、设备发现API你使用DiscoveryAgent类的"设备发现"方法来开始和取消设备发现:.retrieveDevices()重新获得已经发现或者附近的已知设备.startInquiry()启动发现附近设备,也叫inquiry.cancelInquiry()取消当前进行的任何请求蓝牙发现代理在请求阶段的不同时候会分别调用DiscoveryListener(发现监听器)不同的回调方法:.deviceDiscovered()指出是否有设备被发现。
.inquiryCompleted()指出是否请求已经成功、触发一个错误或已被取消。
在图6中的状态图表阐明了设备发现的状态改变结束于相应的回调方法的返回。
图6:设备发现状态表设备发现以调用startInquiry()函数开始。
在请求进行时,蓝牙发现代理会在适当的时候调用回调方法DeviceDiscovered()和inquiryCompleted()。
7、服务发现API你可以使用发现代理的服务发现方法来开始或取消服务发现:.selectService()启动服务发现搜索。
(原文有误,根据API手册应为尝试定位一个服务).searchServices()启动服务发现搜索。
.cancelServiceSearch()取消在正在进行中的任何的服务发现搜索操作。
蓝牙发现代理在服务发现阶段的不同时候会分别调用DiscoveryListener的服务发现回调方法:.servicesDiscovered()表示是否服务已被发现。
.serviceSearchCompleted()表示服务发现是否已经完成。
图7阐明了服务发现的状态改变结束于DiscoveryListener的回调方法的返回。
图7:服务发现状态图表服务发现开始于对searchServices()的调用。
当服务搜索进行时,蓝牙发现代理会在适当的时候回调servicesDiscovered()和serviceSearchCompleted()方法。
除了DiscoveryAgent和DiscoveryListener了,你在服务发现过程中还要使用到的类有UUID,ServiceRecord以及DataElement等。
8、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对象,你可以去掉连字符。
9、SDDB和ServiceRecord接口在服务发现的中心是服务发现数据库(SDDB)和服务发现协议(SDP)。
SDDB由蓝牙实现负责维护的数据库。
它包含了服务记录(service records),后者代表了对客户端有效的服务。
SDP对于基于JABWT应用程序来说是透明的;可以这么说,SDP是用于服务发现的。
为重新获取服务纪录,一个本地设备SDP客户端会向一个远端设备上SDP服务器发出请求。
图8:SDDB每一笔服务记录都会由一个ServiceRecord的实例来表现。
这个记录包含了描述服务细节的属性。
这个类提供了几种有用的方法:.getAttributeIDs()和getAttributeValue()方法返回服务记录的属性。
.getConnectionURL()方法获取链接的URL地址给服务器主机来收集服务记录。
.getHostDevice()方法获取提供服务的远端设备。
.populateRecord()和setAttributeValue()方法用来设置设备记录的属性。
.setDeviceServiceClasses()方法设置服务的类。
图9显示了蓝牙本地设备和远端设备,以及SDDB还有服务记录之间的关系:图9:使用远端设备,SDDB和服务记录进行服务发现为使服务端可以被客户端来使用,服务应用程序要通过如下方法建立一个服务记录,首先要创建一个连接通知器(connection notifier),然后由调用连接通知器的acceptAndWait()方法来向SDDB中插入记录。
服务端程序能够在适当的时候获得记录和更新。