Android BLE蓝牙使用详解

本篇文章,制作学习记录使用,就简单介绍下在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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值