BlackBerry 蓝牙编程(三)

 

作者: 俞伟

 

蓝牙 服务器 端

 

首先启动 蓝牙服 务

 

1 .     第一步获 取 L o cal D e v ice:

LocalDevice device = LocalDevice. getLocalDevice ();

 

2 .     第二步设 置搜索 模式 并设 置搜索模 式为全 局模式 :

device.setDiscoverable(DiscoveryAgent. GIAC );

 

3 .     启动蓝牙 服务:

三种连接 方式   S P P , L 2 CA P , OBEX ,根据 条件启 动不 同服务。

   

public   void   startBluetoothService ( int   uuid){

_uuid   =   uuid;

try {

//   获取本地 蓝牙 设备

LocalDevice   device = LocalDevice. getLocalDevice ();

int   mode   = device.getDiscoverable();

if   (mode   != DiscoveryAgent. GIAC ){

 

// 设置搜索 方式 为全局方 式,发 现 附近 所有 蓝牙设备

device.setDiscoverable(DiscoveryAgent. GIAC );

 

switch ( _uuid ){

 

case BluetoothJSR82Demo. SPP_UUID :

// 启动 SPP 服务, StreamConnectio n

SPPServerThread   sppThread = new   SPPServerThread();

sppThread.start();

break ;

 

case BluetoothJSR82Demo. OPP_UUID :

// 启动 OPP 服务,     OBEX

OPPServerThread   oppThread = new   OPPServerThread();

oppThread.start();

break ;

 

case   BluetoothJSR82Demo. L2CAP_UUID :

// 启动 L2 CA P 服务 ,   L2CAPConnectio nNotifier

L2CAPServerThread   l2capThread = new   L2CAPServerThread();

l2capThread.start();

break ;

}

}

catch (BluetoothStateException   bse){

BluetoothJSR82Demo. errorDialog (bse.toString());

}

}

 

 

启用蓝牙 S PP 服务

 

蓝牙 SP P 服务 基于 Str ea m Co nn ect i o n 。

 

1 .     首先创建 服务唯 一标识 U UID

UUID uuid = new UUID( _uuid );

 

2 .     获取本地 蓝牙设 备,启动 服务

LocalDevice local = LocalDevice. getLocalDevice (); StreamConnectionNotifier service = (StreamConnectionNotifier) Connector. open ( "btspp://localhost:" + uuid + ";name=" + SERVICE_NAME_SPP );

connection   = service.acceptAndOpen();

 

3 .     获取输入 输出流 与客户端 进行读写

 

 

 

 

public   void runSPPService(){

try {

StreamConnection   connection = null ;

DataOutputStream os = null ; DataInputStream is = null ; try {

// 创建服务 唯一 标识     UUID

UUID   uuid = new   UUID( _uuid );

// 获取本地 蓝牙 设备

LocalDevice local = LocalDevice. getLocalDevice ();

 

// 创建 StreamCo nnectionNotifier

StreamConnectionNotifier service = (StreamConnectionNotifier) Connector.open ( "btspp://localhost:" + uuid + ";name=" +

SERVICE_NAME_SPP );

// 等待     St re am C on ne ct io n   客户端的 链接

connection = service.acceptAndOpen();

 

// 获取输入 流读 取数据

is   = connection.openDataInputStream();

byte []   buffer = new   byte [1024];

int readBytes = is.read(buffer);

String   receivedMessage = new   String(buffer,   0, readBytes);

// 发送消息 给客 户端

String message = "/nJSR-82 SERVER says hello!" ; os = connection.openDataOutputStream(); os.write(message.getBytes());

os.flush();

}

finally {

os.close();

is.close();

}

}

catch (IOException   ioe){

BluetoothJSR82Demo. errorDialog (ioe.toString());

}

}


 

启动蓝牙 L 2 C AP 服务

 

1 . 首先创建 UUID ,获取本 地连接

UUID uuid = new UUID( _uuid );

LocalDevice local = LocalDevice. getLocalDevice ();

 

2 . 打开 L 2 CA P 连接, 等待客 户端连接

L2CAPConnectionNotifier service = (L2CAPConnectionNotifier) Connector. open ( "btl2cap://localhost:" + uuid + ";name=" + SERVICE_NAME_L2CAP );

connection   = service.acceptAndOpen();

 

3 . 接收客户 端消息

byte [] buffer = new byte [ 1024 ];

int   readBytes   = connection.receive(buffer);

String receivedMessage = new String(buffer, 0, readBytes);

 

4 . 向客户端 发送数 据

String message = "/nJSR-82 SERVER says hello!" ;

connection.send(message.getBytes());

 

 

 

public   void runL2CAPService (){

try {

L2CAPConnection connection = null ;

try {

// 创建 UUID , 获取本地 蓝牙设 备

UUID   uuid = new   UUID( _uuid );

LocalDevice local = LocalDevice. getLocalDevice ();

 

// 打开 L2CAP 连接,等 待客户 端的链 接

L2CAPConnectionNotifier service = (L2CAPConnectionNotifier) Connector. open ( "btl2cap://localhost:" + uuid + ";name=" +

SERVICE_NAME_L2CAP );

connection   = service.acceptAndOpen();

 

// 创建缓存 , 读取数据

byte []   buffer = new   byte [   1024 ];

int   readBytes   = connection.receive(buffer);

String receivedMessage = new String(buffer, 0, readBytes);

 

// 向客户端发 送数据

String message = "/nJSR-82 SERVER says hello!" ;

connection.send(message.getBytes());

}

finally {

connection.close();

}

}

catch (IOException   ioe){

BluetoothJSR82Demo. errorDialog (ioe.toString());

}

}

 

启动蓝牙 OBE X 服务

 

1 . 首先创建 蓝牙服 务唯一标 识 UUI D 并获取 本地蓝牙 设备

UUID uuid = new UUID( _uuid );

LocalDevice local = LocalDevice. getLocalDevice ();

 

2 . 打开 OBE X 连接

SessionNotifier sessionNotifier = (SessionNotifier) Connector. open ( "btgoep://localhost:" + uuid + ";name=" + SERVICE_NAME_OPP );

 

3 . 注册 OBE X 处理 器来处理 客户端请 求

sessionNotifier.acceptAndOpen( new ObexServerRequestHandler());

   

public   void run(){

try {

// 创建服务 唯一标 识 UUID ,获取本 地蓝牙 设备

UUID   uuid = new   UUID( _uuid );

LocalDevice local = LocalDevice. getLocalDevice ();

 

// 打开 OBEX 连接并 等待客户 端 OBEX 连接

SessionNotifier sessionNotifier = (SessionNotifier) Connector.open ( "btgoep://localhost:" + uuid + ";name=" + SERVICE_NAME_OPP );

 

// 注册 ObextServe rRequestHandler 来处理 客户端请 求

sessionNotifier.acceptAndOpen( new   ObexServerRequestHandler());

}

catch (IOException   ioe){

BluetoothJSR82Demo. errorDialog (ioe.toString());

}

}

 

                  4 . 实现 OBE X 处理 器接口 S e rverR equ est H and ler 。 o n C o nn ect ( ) 在 OB EX 连 接建立 的时候 被调用, 是处理 连接相关 逻辑的地 方。 当 客户端有 数据通过 OBEX 连接输入 服务端 时, o n P u t() 被调 用,读 取数据并 处理。 同时通 过 Operati o n 获取 输出流 向客户端 发送数据 。

 

 

 

 

class   ObexServerRequestHandler   extends   ServerRequestHandler{

 

// 当与客户 端连接 上时 ,调用该 函数

public   int onConnect(HeaderSet   request, HeaderSet reply){

updateStatus( "[SERVER]   OPP session created" );

return   ResponseCodes. OBEX_HTTP_OK ;

}

 

// 当接收数 据和发 送数 据时 调用 该函数 ,从 Op er a ti on 获取 InputStream, OutputStream

public   int onPut(Operation   op){

try {

InputStream is = op.openInputStream();

 

// 读取数据

byte   b[]   = new   byte [1024];

int   len;

while (is.available() > 0 && (len = is.read(b)) > 0){

updateStatus( new   String(b,   0, len));

}

}

catch (IOException   ioe){

BluetoothJSR82Demo. errorDialog (ioe.toString());

}

return   ResponseCodes. OBEX_HTTP_OK ;

}

 

// 当断开连 接时, 调用 该函数

public   void onDisconnect(HeaderSet   req, HeaderSet resp){

updateStatus( "[SERVER] OPP connection closed" );

}

}

 

 

 

BlackBerry SDK下载

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值