BlackBerry 蓝牙编程(一)

作者: 俞伟

 

 

蓝牙 概述

 

Blu et o o th 我们 的蓝牙 蓝牙 构想 P AN P ers o n al A rea N e two r k 个人 网,目 是在 范围的区 域网 实现 牙设备之 间的通 。这 蓝牙设备 一般是 带蓝 牙功能 手机 手持 设备, 牙设 之间的通 信距离在 5 -1 5 之间 完全免 见的蓝 应用 蓝牙 耳麦, 件传 ,数据通 信等等。

 

Bla ckBe rr y 对蓝牙的 包括 J SR 0 8 2 Bla ck Berry 台自 提供的 Blu et o o thS erial P o rt

( 蓝牙 口协议 ) 。其中 J S R0 8 2 较流 ,使 比较广 的蓝 接口标准 ,由 J 2 M E 延续 而来。 文主 说明 J SR0 8 2 牙接 的使

   

JS R08 2 的内容包括:

 

1 .     D ata Tran s m issions On ly - 仅数据

 

2 .     通讯协 :

·     L2 CA P ( 长连接 )

·     RFCOM M

·     SDP

·     Object Exc h ang e P r o t o c o l

 

3 .     功能简

·     Generic Ac cess P r o fil e ( GA P )

·     Service D is co v er y App li cati o n P r o fil e ( SDA P )

·     Seri al P o rt P r o fil e (SP P )

·     Generic Object Exchang e P ro fil e (GOE P )

 

 

JS R 0 8 2 A PI 支持以下功能:

 

1 .     Register se r v ices – 注册

2 .     D isc o v er d e v ices and se r v ic es   发现 牙设 和设 上的服务

3 .     Estab li sh RFC OM M , L 2 CA P an d OBEX co nn e ctio n s     RFCO MM , L 2 CA P , OBE X 连接

4 .     Co ndu ct th ese a cti v ities in a se cur e fashi o n –   安全的 式来 行以上操

 


1 列出了蓝牙协 和协议层

 

蓝牙协议组

协议堆栈

蓝牙核 协议

Baseband , L in k M an ag e r P r o t o co l , L 2 CA P , SD P

有线连 取代

RFCOM M

电话通 控制

TCS Bin ary

已经采 的协议

P P P , UD P / TCP / I P , OB EX , W AP

1

 

1 展现了各协议 协议层的结构

 

 

 BlackBerry 蓝牙编程(一)_第1张图片

1

 

H CI -H o st C o n tr o l In te rfa ce 以下为 牙传 底层协议 H CI 之上为 层协议, H CI 为上层协

议与底 协议 通信提供 了接口 L2 CA P 长连 协议, 为其 高级协议 的基础 数据 传输以 b y te 为基 R FCOMM 为连 线取代协 议,模拟 RS -2 3 2 数据传 通过 Baseband RFCO M M 是其他使 用串 通讯协议 的基础 TCS Bin ary 了通话 制信 号,为 牙设 接收语音 数据提 了通 OBE X 协议为 象级 的传输提 供服务 比如 文本文 ,音 文件,视 频文 联系 文件等各 种文件。

 

什么是 牙简表 ( P r o fil es ) ?蓝牙 表是 对于某一 蓝牙 能所 协议的概 括, 一个 标准, 该类 牙功能挑 选适合 蓝牙 讯协

 

2 展示了常用的 牙功能简表

 BlackBerry 蓝牙编程(一)_第2张图片

 

 

2

 

如图   2   SP P   支持电 网络 传真,耳 麦,网 访问。 G OEP   表支持 件传

对象推 ,数 同步 TC S 简表支持 线电 等。

 

客户端与服务端模式 蓝牙服 是指 用服务程 序通过 牙为 户端提供 数据交 打印服务 就是一 蓝牙

应用服 ,该 用服务程 序运行 与打 机相连的 服务器 ,一 客户端通 过蓝牙 服务 器发送 印请 应用 服务会 行打 操作。作 为蓝牙 务端 它的服务 需要定 一个 Service Re co rd ( ) 并添加 记录到 S erv ic e D isco v er y D a tabase ( SD D B)

 

服务记 注册 ,服务应 用等待 户端 起的访问 。如果 务端 用与客户 端匹配 双方 会建立 牙通 连接。客 户端向 服务 发送请求 ,服务 响应 求。

 


蓝牙

 

蓝牙应 客户 与蓝牙服 务端实 交互

 

1 .     搜索蓝 设备 D ev i ce D is co v ery

2 .     搜索服务     Se rvic e Sear ch

3 .     获取连接   URL –   Ob tain Blu et o o th URL

4 .     建立连接   (RFCOM M , L 2 CA P , OB EX ) –   E stabl ish C o nn e ctio n

5 .     数据交互     D ata T ran s m iss io n

 

 

搜索蓝牙设备

 

启动设 搜索 前,首先 要获取 地蓝 设备 M A C ID 搜索 理, 服务搜 数。

 

 

 

public   class BlueEngine   implements   Runnable,   DiscoveryListener {

 

private DiscoveryAgent agent = null ;

private StreamConnection streamConnection = null ;

private   DataInputStream   dis   =   null ;

private DataOutputStream dos = null ;

private   Thread   thread   =   null ;

private   int maxServiceSearches   =   0;

private int serviceSearchCount ; private ServiceRecord record = null ; private Vector deviceList ;

 

public String command = null ; public String url = null ; public String macId = null ;

 

private Object bluelock = new Object();

 

public BlueEngine() {}

 

public void initBluetooth() throws Exception {

 

// 获取本 设备

LocalDevice local = LocalDevice. getLocalDevice ();

//   获取本 蓝牙     MA C   I D

macId = local.getBluetoothAddress();

//   获取蓝 设备 索代理

agent = local.getDiscoveryAgent();

 

try { // 获取最 服务 索数

maxServiceSearches = Integer.parseInt (LocalDevice. getProperty ( "bluetooth.sd.trans.max" ));

}   catch   (NumberFormatException   e) {}

 

deviceList   =   new   Vector();   //   蓝牙设 队列

}

 

 


 

Blu eEng in e 实现 D i sco v er yL ist ener 口来 行和完 蓝牙 备搜 调用搜 代理 ag ent.startInqu iry( D isc o v er y Ag ent.GI AC , thi s) 动蓝 牙搜索 参数 GIA C 指明 搜索所 能够发 现的蓝 设备 参数 thi s D isc o v er yL ist ener ,当 搜索完 后系 调用 D isc o v ery L isten er 接口回 处理 搜完成后 如果蓝 设备 列不为空 ,启动 务搜

   

public   void getBluetoothUrl()   throws   Exception   {

record = findService();

url   =   record .getConnectionURL(ServiceRecord. NOAUTHENTICATE_NOENCRYPT ,

false );

}

 

public ServiceRecord findService() {

 

try {

//   启动搜 代理 现设 DiscoveryListener 注册回调

agent .startInquiry(DiscoveryAgent. GIAC ,   this );

 

// 设备搜 过程 异步 ,这里 要同 搜索

//   设备搜 完毕 通知 线程继 运行

synchronized   ( bluelock )   {

try {

bluelock .wait();

}   catch   (Exception   e) {}

}

}   catch   (BluetoothStateException   e) {

System. out .println( "Unable to find devices to search" );

}

 

// 蓝牙设 队列不为 空,启 服务

if   ( deviceList .size()   > 0) {

if   (searchServices( deviceList ))   {

return record ;

}

}

 

return   null ;

}

D isc o v ery L isten er 两个 回调接 。接口 d ev ic eD is co v ered( Re m o te D e v ice, D e v iceClas s) 收入 被发现 蓝牙 备。 inqu iryCo m p let ed(in t) 通知程 设备 索完毕, 通知主线 程继

 

 

public   void deviceDiscovered(RemoteDevice   btDevice, DeviceClass cod) {

//   当发现 牙设 时, 果该设 蓝牙 id 0 00 27 开头

//   则收入 设备

if   (btDevice.getBluetoothAddress().startsWith( "00027" ))   {

deviceList .addElement(btDevice);

}

}

 

public   void inquiryCompleted( int   discType)   {

//   蓝牙搜 执行 毕, 知主线 继续

synchronized   ( bluelock )   {

try   {

bluelock .notify();

}   catch   (Exception   e) {

}

}

}

  

 

BlackBerry SDK下载

 

  • BlackBerry Java Plug-in for Eclipse v1.1
  • Java Plug-in for Eclipse Update Site
  • BlackBerry Web Plug-in v2.0
  • BlackBerry Widget SDK v1.0
  • BlackBerry Theme Studio v5.0
  • Plazmic Content Developer’s Kit v4.7
  • BlackBerry smartphone simulators
  •  

     

    相关链接:

    BlackBerry 蓝牙编程(一)
    BlackBerry 蓝牙编程(二)

    BlackBerry 蓝牙编程(三)

    你可能感兴趣的:(编程,object,service,Exchange,BlackBerry,通讯)