App及小程序蓝牙开发的几个重要步骤
不管是基于IOS还是Android或者是小程序 蓝牙开发的过程都包含下面几个重要的步骤1.搜索设备设备搜索是一个扫描程序它会搜索本地附近启用了蓝牙的设备并从这些设备上获取一些信息这个过程有时简称为“发现中”、“查询中”或者“扫描中”。然而在本地区域范围内的蓝牙设备只有在它是允许被发现的模式下才会响应其它设备扫描发现的请求。如果一个设备是可被发现的状态模式它会通过共享一些信息来响应搜索发现的请求例如设备名字设备类型和它的MAC地址。使用这些信息执行扫描的设备才能创建一个连接连接上被发现的设备。a.获取适配器mBluetoothAdapter BluetoothAdapter.getDefaultAdapter();b.打开适配器Intent enableIntent new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableIntent, REQUEST_ENABLE_BT);c.搜索蓝牙设备获取已配对设备SetBluetoothDevice pairedDevices mBtAdapter.getBondedDevices();搜索周边设备mBtAdapter.startDiscovery();BluetoothDevice.ACTION_FOUND找到一个BluetoothAdapter.ACTION_DISCOVERY_FINISHED搜索结束。2.连接到蓝牙ConnectThread:服务端设备和客户端设备获取BluetoothSocket的方法不同。服务端设备将会在接受一个传入的连接请求时获得。客户端设备会在它打开与服务端设备的RFCOMM通道时获得。一种解决方案是自动将每一台设备作为服务端这样每一台设备都拥有一个server socket可以监听连接。之后每一台设备都可以启动一个与其它设备的连接并变成客户端设备。另外也可以明确一台设备作为服务端根据需要启动一个server socket其它设备只要简单的建立连接。a.根据地址获取设备BluetoothDevice device mBluetoothAdapter.getRemoteDevice(address)b.获取设备soceket:device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);c.取消扫描设备连接soceket:端口mAdapter.cancelDiscovery();mmSocket.connect();3.数据信息交互ConnectedThread首先你需要为所有数据流的读写操作分派一个特定的线程。这是非常重要的因为read(byte[])和write(byte[])方法都是会阻塞的方法。read(byte[])方法在从数据流中读取到数据之前会一直阻塞。write(byte[])方法不会经常阻塞但是在远程设备没有及时调用read(byte[])方法并且中间缓冲区满的时候也会进行阻塞。因此你的线程中的主循环应该专门用来从InputStream中读取数据。线程中再指定一个公共方法将数据写入到OutputStream中。a.获取读写流tmpIn socket.getInputStream();tmpOut socket.getOutputStream();b.阻塞方法读取bytes mmInStream.read(buffer);c.发送消息mmOutStream.write(buffer);d.通过handler将文本添加到listview成为新的消息mConversationArrayAdapter.add(\\\\\\\Me: \\\\\\\ writeMessage);