博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android蓝牙交互,Android蓝牙通信app
阅读量:5868 次
发布时间:2019-06-19

本文共 1754 字,大约阅读时间需要 5 分钟。

首先要了解蓝牙,然后要知道蓝牙是怎么工作的,下面是蓝牙的工作流程:

1.发现周围的蓝牙设备

2.获取发现设备的adress,根据adress得到远程设备的BluetoothDevice,然后创建BluetoothSocket,最后connect()

df83038fc129

(1)BluetoothChat

例子的主Activity。onCreate()得到本地BluetoothAdapter设备,检查是否支持。onStart()中检查是否启用蓝牙,并请求启用,然后执行setupChat()。setupChat()中先对界面中的控件进行初始化增加点击监听器等,然创建BluetoothChatService对象,该对象在整个应用过程中存在,并执行蓝牙连接建立、消息发送接受等实际的行为。

(2)BluetoothChatService

public synchronized void start():开启mAcceptThread线程,由于样例程序是仅2人的聊天过程,故之前先检测mConnectThread和mConnectedThread是否运行,运行则先退出这些线程。

public synchronized voidconnect(BluetoothDevice device):取消CONNECTING和CONNECTED状态下的相关线程,然后运行新的mConnectThread线程。

public synchronized voidconnected(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 extendsThread:创建监听线程,准备接受新连接。使用阻塞方式,调用BluetoothServerSocket.accept()。提供cancel方法关闭socket。

private class ConnectThread extendsThread:这是定义的连接线程,专门用来对外发出连接对方蓝牙的请求和处理流程。构造函数里通过BluetoothDevice.createRfcommSocketToServiceRecord(),从待连接的device产生BluetoothSocket.然后在run方法中connect,成功后调用BluetoothChatSevice的connected()方法。定义cancel()在关闭线程时能够关闭相关socket。

private class ConnectedThread extendsThread:这个是双方蓝牙连接后一直运行的线程。构造函数中设置输入输出流。Run方法中使用阻塞模式的InputStream.read()循环读取输入流,然后post到UI线程中更新聊天消息。也提供了write()将聊天消息写入输出流传输至对方,传输成功后回写入UI线程。最后cancel()关闭连接的socket。

(3)DeviceListActivity

该类包含UI和操作的Activity类,作用是得到系统默认蓝牙设备的已配对设备列表,以及搜索出的未配对的新设备的列表。然后提供点击后发出连接设备请求的功能。

转载地址:http://jdtnx.baihongyu.com/

你可能感兴趣的文章
mysql索引操作
查看>>
J2EE的web.xml中filter-mapping的位置导致的乱码问题
查看>>
在Nginx中搭建Nagios监控平台
查看>>
Linux下调整根目录的空间大小
查看>>
cacti unable to connect to smtp host
查看>>
字符编码
查看>>
New technique about Docker
查看>>
foreach语句
查看>>
Java多线程编程(二)操作状态与常用方法
查看>>
centos7-php安装
查看>>
权限管理
查看>>
“Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
查看>>
MATLAB数字图像处理之一:初识数字图像处理
查看>>
xshell等终端不自动换行
查看>>
测试用例
查看>>
redis单机安装
查看>>
利用ssh传输文件
查看>>
java 代码排序
查看>>
系统默认权限、网站比较安全权限、默认权限控制命令umask、文件系统属性(文件属性)、特殊权限...
查看>>
ShadowBroker释放的NSA工具部分(windows)fb.py复现和中招检查方法
查看>>