Java 蓝牙无线API 简介

  • Post author:
  • Post category:java


原文地址:

http://www.oracle.com/technetwork/articles/javame/index-156193.html

JSP 82 实际上指明了两个独立可选的Java包:核心蓝牙接口(core Bluetooth API)和对象交换接口( Object Exchange (OBEX) API)。这里主要关注前者

javax.bluetooth

蓝牙开发用例主要有:


  • Initialization

    – 初始化,支持蓝牙的设备必须首先初始化蓝牙栈。

  • Client

    – 客户端服务。它搜索附近的可用设备并连接。

  • Server

    – 服务端,为客户端提供服务。服务端将客户端注册进服务发现数据库SDDB来等待发送数据。它接收客户端的连接请求,如果后面不连接了就从数据库删掉。

客户端设备使用 JABWT

discovery API

搜索附近设备。

DiscoveryAgent

类可用来发现设备或者服务。如果要在被发现服务后接受通知,需要实现

DiscoveryListener

接口。

使用

DiscoveryAgent

类的设备有如下方法发现设备:


  • retrieveDevices()

    获取附近设备;

  • startInquiry()

    初始化设备发现,称为

    inquiry.

  • cancelInquiry()

    取消进行中的搜索。

有如下方法发现服务:


  • selectService()

    初始化服务发现;

  • searchServices()

    初始化服务发现;

  • cancelServiceSearch()

    取消搜索。

实现

DiscoveryListener在

设备搜索阶段有两个方法可用:


  • deviceDiscovered()表明设备是否被发现;

  • inquiryCompleted()表明搜索的结果。

有如下方法在服务搜索阶段:


  • servicesDiscovered()

    表明服务被发现;

  • serviceSearchCompleted()表明搜索已完成。

服务发现的核心是服务发下数据库SDDB和服务发现协议SDP。数据库由蓝牙模块维护,有一个服务记录表记载可用的服务。而协议是用来发现服务的。蓝牙通过SDP协议向附近社保请求其服务记录表信息。

每个服务记录表对应一个

ServiceRecord

实例。该类有如下方法:


  • getAttributeIDs()

    and

    getAttributeValue()

    获取服务记录属性。

  • getConnectionURL()获取资源连接URL。

  • getHostDevice()

    获取服务设备信息。

  • populateRecord()

    and

    setAttributeValue()

    设置记录属性。

  • setDeviceServiceClasses()设置服务级别。

设备管理有三个类:


  • LocalDevice

  • RemoteDevice

  • DeviceClass


LocalDevice

用来获取本机设备信息(RemoteDevice也类似):


  • getBluetoothAddress()

    蓝牙地址

  • getDeviceClass()

    设备级别

  • getFriendlyName()

    别名

  • getRecord()

    服务记录表

  • updateRecord()更新记录表

  • getDiscoverable()

    可发现状态

  • setDiscoverable()

    设置状态

  • getDiscoveryAgent()

    发现代理

  • getProperty()设备蓝牙属性

蓝牙属性通过如下字段获取:


  • bluetooth.api.version

    ,蓝牙API版本

  • bluetooth.sd.attr.retrievable.max

    ,服务记录表最大连接数

  • bluetooth.connected.devices.max

    ,设备最大连接数

  • bluetooth.sd.trans.max

    , 最大服务发现并发数


DeviceClass

有如下方法:


  • getMajorDeviceClass()

    获取设备最小级别;

  • getMinorDeviceClass()

    获取最大级别;

  • getServiceClasses()获取服务级别

设备被发现以后,其级别也会被发现。