BluetoothChat 例程分析

Google 提供的关于 Bluetooth 开发的例程为 Bluetoothchat。除去配置及 UI定义等文

件, 主程序文件共三个: BluetoothChat.java 、BluetoothChatService.java 以及

DeviceListActivity.java ,详细功能可见下面的描述。

1.BluetoothChat.java

例程的主 Activity 。 onCreate() 得到本地 BluetoothAdapter 设备,检查是否支持。

onStart() 中检查是否启用蓝牙,并请求启用,然后执行 setupChat()。setupChat() 中

先对界面中的控件进行初始化增加点击监听器等,然创建BluetoothChatService 对象,该

对象在整个应用过程中存在,并执行蓝牙连接建立、消息发送接受等实际的行为。

2.BluetoothChatService.java

public synchronized void start() :

开启 mAcceptThread 线程,由于样例程序是仅 2 人的聊天过程,故之前先检测

mConnectThread 和 mConnectedThread 是否运行,运行则先退出这些线程。

public synchronized void connect(BluetoothDevice device) 

取消 CONNECTING 和 CONNECTED 状态下的相关线程,然后运行新的mConnectThread 线程。

public synchronized void connected(BluetoothSocket socket, BluetoothDevice device) 

开启一个 ConnectedThread 来管理对应的当前连接。之前先取消任意现存的

mConnectThread 、 mConnectedThread 、 mAcceptThread 线程, 然后开启新

mConnectedThread ,传入当前刚刚接受的 socket 连接。最后通过Handler 来通知 UI

连接 OK 。

public synchronized void stop() :停止所有相关线程,设当前状态为NONE 。

public void write(byte[] out) : 在 STATE_CONNECTED 状态下, 调用

mConnectedThread 里的 write 方法,写入 byte 。

private void connectionFailed() :连接失败的时候处理,通知 ui ,并设为

STATE_LISTEN 状态。

private void connectionLost() :当连接失去的时候,设为 STATE_LISTEN状态并通

知 UI 。

内部类:

private class AcceptThread extends Thread :创建监听线程,准备接受新连接。使

用阻塞方式,调用 BluetoothServerSocket.accept() 。提供 cancel 方法关闭 socket 。

private class ConnectThread extends Thread :这是定义的连接线程,专门用来对

外发出连接对方蓝牙的请求和处理流程。构造函数里通过

BluetoothDevice.createRfcommSocketToServiceRecord() , 从待连接的device 产生

BluetoothSocket. 然后在 run 方法中 connect ,成功后调用BluetoothChatSevice 的

connected() 方法。定义 cancel() 在关闭线程时能够关闭相关 socket 。

private class ConnectedThread extends Thread :这个是双方蓝牙连接后一直运行

的线程。构造函数中设置输入输出流。 Run 方法中使用阻塞模式的InputStream.read() 循

环读取输入流, 然后 post 到UI 线程中更新聊天消息。也提供了 write() 将聊天消息写

入输出流传输至对方,传输成功后回写入 UI 线程。最后 cancel() 关闭连接的 socket 。

3.DeviceListActivity.java

该类包含 UI 和操作的 Activity 类,作用是得到系统默认蓝牙设备的已配对设备列

表,以及搜索出的未配对的新设备的列表。然后提供点击后发出连接设备请求的功能。



BluetoothDevice 类,此为对应的远程蓝牙 Device

createRfcommSocketToServiceRecord() :创建该 Device 的 socket 。

BluetoothSocket 类

connect() :请求连接蓝牙。

getInputStream() :得到输入流,用于接收远程方信息。

getOutputStream() :得到输出流,发送给远程方的信息。

close() :关闭蓝牙连接。

InputStream 类:

read(byte[]) :以阻塞方式读取输入流。

OutputStream 类:

write(byte[]) :将信息写入该输出流,发送给远程。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值