使用Java蓝牙无线通讯技术API概述
蓝牙是一种低成本、短距离的无线通信技术。对于那些希望创建个人局域网(pans)的人们来说,蓝牙技术已经越来越流行了。每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和pda等设备提供了自动连接和即时共享数据的能力。
为了在java平台上开发支持蓝牙技术的 软件其他 ,jcp定义了 js r82标准--java蓝牙无线技术apis(jabwt)。
在这篇文章中,我将介绍一些关于蓝牙技术的背景,概述一下支持蓝牙技术的midlet 应用程序 的典型要素,然后介绍给你核心的java蓝牙apis。最后我们展示一些代码来演示如何使用这些apis。
实际上 js r82定义了两个独立的可选包:核心蓝牙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:蓝牙协议栈
js r82揭示了蓝牙 软件其他 栈给java平台的开发者。其中引起我们兴趣的是服务发现协议(sdp),用来模拟串口的串口profile rfcomm,向上层协议提供诸如分割和重组等导向性连接的数据转换操作的逻辑链路控制及适配profile(l2cap),以及多路技术协议。注意jabwt不支持无连接l2cap。
jabwt也包括对象交换api。obex也是高层api,它用来交换对象数据,诸如电子商业卡和日历标签之间以vcard和vcalendar的格式进行数据传输。在蓝牙上,
此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
对象交换通过rfcomm发生。obex在最开始时是由红外(irda)引入的,并且它可以在irda协议、tcp/ip或者是其他协议的顶层实现。
典型的蓝牙应用程序实例
一个开启蓝牙功能的应用可以作为一个服务端或是一个客户端--一个服务的提供者或是消费者,或者它可以作为一个真正的点对点终端同时表现出服务和客户的行为。图2所示一个蓝牙规范用例:
图2:一个典型的具有蓝牙功能的实际用例
对这些用例的简要介绍:
.初始化--所有具备蓝牙功能的 应用程序 必须先要初始化蓝牙栈。
.客户端--一个客户对远端服务进行消费。首先它要发现所有附近的设备,然后对于每一个发现的设备搜索它感兴趣的服务。
.服务器端--一个为客户端提供服务的服务器。它在服务发现 其他数据库 (sddb)中对客户端进行注册,对他们进行有效广播。然后等待引入的连接,在他们进入时接受他们并为他们提供服务。最后,当不再需要服务时, 应用程序 会在服务发现 其他数据库 (sddb)中将他们移除。图三:用例中参与活动的图表:
图 3: 蓝牙 应用程序 活动图
蓝牙应用程序中的元素
图4显示了在midlet中一个典型蓝牙功能 应用程序 中的一些元素:
图4: 具有蓝牙功能的 midlet (高端组织)
中间的是核心 应用程序 my bluetooth midlet,它扩展自javax.microedition.midlet.midlet。没有显示出来的还有midlet中实现的javax.microedition.lcdui.commandlistener以监听从用户接口中输入的命令。 应用程序 使用的剩余的类和接口都包含在了蓝牙规范中,像设备发现和服务,连接和服务消费,还有广播和提供服务。
使用诸如mvc等 设计模式 是很好的实践。mvc把 应用程序 分解成用户接口(视图), 应用程序 行为和导航(控制器),以及数据(模型),当然在我们的案例中还要加上蓝牙api的支撑类和接口。像将分离的客户端、服务端行为构建成独立的类以便以后可以重用这些组件,也是
此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
很好的设计。
java蓝牙api核心概述
js r82需求的"最小公分母"是 受限连接设备配置(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
getattributeids() 和 getattributevalue()方法返回服务记录的属性。
.getconnectionurl()方法获取链接的url地址给服务器主机来收集服务记录。
.gethostdevice() 方法获取提供服务的远端设备。
.populaterecord() 和 setattributevalue()方法用来设置设备记录的属性。
.setdeviceserviceclasses()方法设置服务的类。
使用Java蓝牙无线通讯技术API概述相关推荐
- 使用Java蓝牙无线通讯技术API
蓝牙是一种低成本.短距离的无线通信技术.对于那些希望创建个人局域网(PANs)的人们来说,蓝牙技术已经越来越流行了.每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA等设备提供了自 ...
- Java远程通讯技术及原理分析
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些 ...
- Java 远程通讯技术及原理分析
转自:https://www.cnblogs.com/Luouy/p/7399918.html 消息模式 归根结底,企业应用系统就是对数据的处理,而对于一个拥有多个子系统的企业应用系统而言,它的基础支 ...
- java 及时通讯弹幕技术 视频播放 websocket SSM 集成代码生成器 源码
获取[下载地址] QQ: 313596790 官网 http://www.fhadmin.org/ A 代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [ ...
- Java API概述及应用
Java API概述及应用 5.1_Scanner和Random的使用 (1)Scanner (2)Random生成随机数 5.2_ArrayList集合的使用 (1)ArrayList的定义及限制 ...
- Java基础---API概述---常用类(Object类/String类)---equals和==
API概述 API:application programming interface,应用程序编程接口 用于规定方法名称的规则集合,定义了方法的修饰符.返回值类型.方法的名称.方法的参数列表.方法的 ...
- Java基础:01Java语言概述(常见的DOS命令,Java语言的特点、核心机制、环境搭建,HelloWorld,注释,Java API 文档)
Java基础:01Java语言概述 一.常见的DOS命令 二.Java语言的特点 面向对象性 健壮性 跨平台型 三.Java两种核心机制 1. Java虚拟机 2. 垃圾回收 四.Java语言的环境搭 ...
- autocad java api_AutoCAD .NET API 概述
Overview of the AutoCAD .NET API AutoCAD .NET API概述 The AutoCAD .NET API enables you to manipulate A ...
- Web实时通讯技术简介
一.概述 1.Web端即时通讯技术 即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的.但是在Web中,由于浏览器 ...
最新文章
- 图解Java中那18 把锁
- mysql平均分 面试_经典mysql面试题 - 学生成绩
- shell脚本之case用法
- 为什么我的C4C Service Request没办法Release到ERP?
- NavigationBar 渐隐效果
- (八)Spring与MyBatis整合
- 如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?
- mysql修改子分区_创建MySQL子分区方法
- nlp中的经典模型(三)
- 热水器是长期开着好还是要等到用的时候才开?
- java gui变量_关于java:静态/类变量和GUI
- 【推荐系统】BERT4Rec:使用Bert进行序列推荐
- android p 小米6,小米6 想升级 Android P,系统软件工程师发话:可适配
- 腾讯云轻量应用服务器下使用RPM包方式安装GreatSQL单主环境
- 运营事故的处理及预防
- 区块链开发的权威指南
- ResultSet(结果集)、Statement
- Linux 查看查找文件
- 高数巨占座问题(c语言)
- 2020G1工业锅炉司炉操作证考试及G1工业锅炉司炉作业模拟考试