科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道在J2ME中开发蓝牙无线软件

在J2ME中开发蓝牙无线软件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

越来越多的移动话机开始支持Java软件,但是你知道其实很多设备也可以支持Java 2 Micro Edition(J2ME)软件的运行么?

作者:ZDNet China 2007年5月14日

关键字: java 蓝牙

  • 评论
  • 分享微博
  • 分享邮件
越来越多的移动话机开始支持Java软件,但是你知道其实很多设备也可以支持Java 2 Micro Edition(J2ME)软件的运行么?

适用于蓝牙无线技术的JABWT标准(Java APIs for Bluetooth wireless technology),由JSR 82规范所定义,支持蓝牙应用软件的快速开发,并保证其轻便,安全,以及具有高 度的可用性。而无线设备制造商们对该标准的回应就是——已经纷纷宣布移动话机以及其他产品将支持JABWT程序的运行。

本文将回顾一下在移动设备上开发蓝牙Java的原理,并说明一下如何为蓝牙通讯书写一个Java程序。

Java蓝牙API
Java蓝牙API主要依赖于Java普通连接架构,该架构长期将其限制在J2ME之内;不过,也有建议将GCF包含进J2SE的。Java蓝牙API可被用于一个相当广泛的系统之内。

蓝牙Java API定义了两个包:javax.bluetoothe,用于核心Java蓝牙API,以及Javax.obex,用于目标交换协议(OBEX,Object Exchange)。基于JSR 82规范,潜在蓝牙系统必须 支持一个蓝牙控制中心(BCC,Bluetooth Control Center),它作为一个控制面板类似程序,允许用户或者OEM制造商,根据堆栈中的特定配置参数定义特定的值。特定情况下, 它将被用于一个堆栈的初始化。任何蓝牙程序都有这些成分:栈初始化,设备管理,设备发现,服务发现,以及通讯。

栈初始化
在预备开始无线通讯时,你需要根据制造商指定的方式,对蓝牙设备进行初始化。(要谈到具体的正确堆栈初始化步骤,则超出了蓝牙API规范所覆盖的范围)

在一篇关于“蓝牙和Java起步 ”的Java.net文章中,Bruce Hopkins(蓝牙Java的作者)演示了在Atinav Java蓝牙SDK开发包中,这一系列的设定是如何完成的(可以查看表格A)。有一点很重要,就是这些调用并不是JSR 82规 范的一部分。其他的JSR 82部署可能会混合其他的方式,来初始化堆栈。

设备管理
JSR 82规范引进了两个类,你可以用在设备管理方面:LocalDevice(本地设备)以及RemoteDevice(远程设备)。

LocalDevice(本地设备)允许你获取关于蓝牙设备的静态信息。它依赖于javax.blutetooth.DeviceClass类,来去的设备的类型,以及它所要求的服务种类。

RemoteDevice(远程设备)允许你获取有关附近蓝牙设备的信息(比方说,一个远程蓝牙设备的地址)。它描绘一个远程设备(也就是说,在一定范围内的某台设备),并提供获 取该设备有关信息的方法,包括该设备的蓝牙地址以及名称。

每台蓝牙设备都有一个独一无二的硬件地址,就像电脑的MAC地址一样。你可以设定设备发现的级别,并通过调用在LocalDevice对象中的setDiscoverable()方法(查看表格B),让其他蓝牙设备找到该设备。

设备发现
无线设备需要一种机制,允许他们发现其他设备,并获得对它们的访问权。核心蓝牙API的DiscoveryAgent类,以及DiscoveryListener接口提供了必要的发现设备。一共有三种方 法来获取可访问设备的列表。DiscoveryAgent.startInquiry()方法将设备放入一种调查模式。要利用这种模式,应用程序必须定义一个事件聆听器,从而对和聆听有关的事件做出 响应。每当聆听发现了一台设备,就会调用DiscoveryListener.deviceDiscovered()。当该聆听完成或者被取消后,就会调用DiscoveryListener.inquiryCompleted()。

如果该设备不希望被动等待发现其他设备,它可以使用DiscoveryAgent.retrieveDevices()方法,来获取一个现存的列表。根据传递的参数不同,该方法可以返回一个先前聆听所 发现的设备列表,或者返回一个本地设备告知蓝牙控制中心的,它将经常联系的已知设备列表。表格C显示了最简单的方法,当发现一台新蓝牙设备时,就向DiscoveryAgent要求一个对象,通过DiscoveryListener接口来通知你。

服务发现
服务发现可以运行你发现的附近服务,而不管到底是何种设备提供了它们。DiscoveryAgent提供了方法,用来在一台蓝牙服务器设备上发现服务,并初始化“发现服务”事务。在 一个服务可以被发现之前,它必须被在一台蓝牙服务器设备上注册或者广告。该服务器对一系列事务进行响应,包括建立一个服务记录,以说明所提供的服务,接受来自客户端的 连接,以及向服务器的服务发现数据库(SDDB,server's Service Discovery Database)添加一条服务记录。一般情况下,它工作起来很像网页服务。表格D就是一个服务注册的示例。

通讯
两台设备必须共享一个通用通讯协议。为了程序可以访问多种不同类型的蓝牙服务,蓝牙Java API提供了一种允许连接到任意使用RFCOMM, L2CAP, OBEX协议服务的机制。如果一个 服务使用了另一种协议(比如TCP/IP),属于这些协议的上一层,那么该程序可以访问服务,但是仅当它在程序中部署了其他协议后,才可以使用CLDC通用连接架构。

URL则使用了一种服务记录,由数字和字母组成,看起来就像是这样:btspp://508031205080110F1B1B1D1C100:8。这意味着一个客户端应当使用一个蓝牙串行接口类型(btspp:// )来和服务器上的频道8建立连接,连接的设备地址是508031205080110F1B1B1D1C100。设备地址和电脑的物理地址类似。表格E显示了简单的RFCOMM连接看起来是怎样的。

(责任编辑:陈毅东

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章