本篇文章,制作学习记录使用,就简单介绍下在Android端BLE蓝牙通讯。 
 BLE蓝牙通讯必须建立服务端和客户端。 
 从讲解之前我们先简单介绍下一下一个类BluetoothManager(蓝牙管理器),BluetoothAdapter(蓝牙适配器),BluetoothDevice(蓝牙设备),BluetoothSocket(蓝牙通讯客户端Socket),BluetoothServerSocket(蓝牙通讯服务端Socket) 
 ,BluetoothGatt(操作GAT服务),BluetoothLeScanner(BLE蓝牙扫描器)BluetoothManager是专门管理蓝牙的,其中主要使用的方法有 
 getAdapter: 获取蓝牙适配器,一个手机只有一个蓝牙适配器对象; 
 getConnectionState: 获取远程蓝牙设备的连接状态; 
 getConnectedDevices: 获取连接过的远程设备; 
 getDevicesMatchingConnectionStates:根据不同的连接状态来获取匹配的设备; 
 openGattServer:打开本地蓝牙的GAT服务。作用是将第三方请求对蓝牙的一些操作进行处理并返回;BluetoothAdapter主要作用就是用来操作蓝牙的,一个手机中只有一个蓝牙适配器,其中主要使用的方法有 
 getDefaultAdapter:获取全局唯一的蓝牙适配器l; 
 getRemoteDevice:获取指定地址的蓝牙设备对象; 
 getBluetoothLeAdvertiser:获取全局唯一的一个蓝牙广告对象; 
 getBluetoothLeScanner:获取全局唯一的BLE蓝牙扫描器; 
 isEnabled:判断蓝牙是否是开启状态; 
 isLeEnabled:判断BLE蓝牙目前是否是开启状态; 
 disableBLE:禁用掉BLE蓝牙; 
 enableBLE:启用BLE蓝牙; 
 getState:获取目前蓝牙所处的状态; 
 getLeState:获取目前BLE蓝牙所处的状态; 
 enable:开启蓝牙; 
 disable:禁用蓝牙; 
 getAddress:获取本地蓝牙地址; 
 getName:获取本地蓝牙名称; 
 setName:设置本地蓝牙名称; 
 getScanMode:获取蓝牙扫描模式; 
 setScanMode:设置蓝牙扫描模式; 
 startDiscovery:开始发现新设备; 
 cancelDiscovery:取消发现新设备; 
 isMultipleAdvertisementSupported:判断是否支持发送广告; 
 getBondedDevices:获取已经绑定过的设备; 
 listenUsingRfcommWithServiceRecord:创建监听,主要作用就是获取输入流和输出流实现和蓝牙的基本通讯;BluetoothDevice是蓝牙描述对象,一个实体对象;
BluetoothSocket,BluetoothServerSocket都封装了输入流和输出流以实现蓝牙之间的基本通讯;
BluetoothLeScanner蓝牙扫描器,主要作用是发现蓝牙, 
 主要用到的方法只有两个,那就是startScan开始蓝牙扫描,stopScan停止扫描BluetoothGatt,主要是实现监听对蓝牙读写的一些回调实现;
蓝牙通讯 
 第一部就是开启蓝牙,开启蓝牙有两种方式实现:方法一: 
 mBluetoothAdapter.enable();直接开启,但是还会提示权限请求;方法二: 
 startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),1);第二部就是扫描蓝牙设备,扫描蓝牙设备有三种方法:
方法一: 
 mBluetoothAdapter.startDiscovery();(通过接受广播的方式来接受扫描返回结果)方法二: 
 mBluetoothAdapter.startLeScan(callback); (过时的方法)方法三: 
 mBluetoothAdapter.getBluetoothLeScanner().startScan(callback);设备扫描完毕,就要实现蓝牙拦截通讯了:
mBluetoothSocket=mBluetoothDevice.createRfcommSocketToServiceRecord(UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”)); 
 mBluetoothSocket.connect(); 
 要保证要链接和被链接两端的UUID一致。如果连接成功接下来就是简单的Socket通讯了;
但是如果要读取或者修改远程蓝牙的一些属性,就要这样
mBluetoothDevice.connectGatt(context, autoConnect,callback)
但是如果要重写写入或者读取蓝牙设备的属性的回调和处理逻辑,可以这样处理: 
 mBluetoothManager.openGattServer(context,callback);如果要向其它的蓝牙设备广告自己的信息,可以这样: 
 bluetoothLeAdvertiser.startAdvertising(AdverseSettings,AdvertiseData,AdvertiseCallback);