Android蓝牙通信app

作者: 赤赤有名 | 来源:发表于2016-04-28 21:06 被阅读926次

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

1.发现周围的蓝牙设备

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



(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类,作用是得到系统默认蓝牙设备的已配对设备列表,以及搜索出的未配对的新设备的列表。然后提供点击后发出连接设备请求的功能。

代码链接GitHub - hesiyi/MyBluetoothChat

相关文章

  • Android蓝牙通信app

    首先要了解蓝牙,然后要知道蓝牙是怎么工作的,下面是蓝牙的工作流程: 1.发现周围的蓝牙设备 2.获取发现设备的ad...

  • Android BLE蓝牙开发-读写数据 获取UUID

    最近在做一个蓝牙智能锁的项目,需要在Android APP 上使用 Ble低功耗蓝牙 和单片机蓝牙设备进行通信,...

  • Android实践 -- Android蓝牙设置连接

    蓝牙开发相关 使用Android Bluetooth APIs将设备通过蓝牙连接并通信,设置蓝牙,查找蓝牙设备,配...

  • android蓝牙通讯开发---与蓝牙模块进行通信

    转自android蓝牙开发---与蓝牙模块进行通信 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝...

  • Android蓝牙通信

    基础准备 蓝牙通信概念 通常意义的蓝牙通信的含义就是Client通过蓝牙对接后进行数据通信,这里面需要注意的是蓝牙...

  • Android蓝牙通信

    在平时的开发过程中,我们经常会需要通过蓝牙通信协议来实现与其他蓝牙设备通信以达到设备间的数据传输。 下面整理了一下...

  • Android 蓝牙(一)蓝牙通信

    1 蓝牙基本操作 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。总结了下蓝牙开发使用的一些东西分享一下。蓝...

  • Android手机的设备信息获取

    最近在适配Android手机与蓝牙的通信,需要Android通过socket机制的网络通信,整理了了一些获取设备信...

  • 基于 arduino 蓝牙模块

    Arduino蓝牙模块与Android实现通信 http://www.cnblogs.com/rayray/p/3...

  • 进程间通信

    Android 使用Messenger实现跨app通信

网友评论

    本文标题:Android蓝牙通信app

    本文链接:https://www.haomeiwen.com/subject/ddyhrttx.html