600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android ble连接过程 Android开发之ble蓝牙

Android ble连接过程 Android开发之ble蓝牙

时间:2022-04-02 11:06:42

相关推荐

Android ble连接过程 Android开发之ble蓝牙

前言

由于自己工作中需要开发ble的项目,于是在折腾了一段时间后也有所了解,便想写下来分享给大家,同时对自己的知识也是一种巩固

1.BLE介绍

BLE是Bluetooth Low Energy的缩写,又叫蓝牙4.0,区别于蓝牙3.0和之前的技术。BLE前身是NOKIA开发的Wibree技术,主要用于实现移动智能终端与周边配件之间的持续连接,是功耗极低的短距离无线通信技术,并且有效传输距离被提升到了100米以上,同时只需要一颗纽扣电池就可以工作数年之久。BLE是在蓝牙技术的基础上发展起来的,既同于蓝牙,又区别于传统蓝牙。BLE设备分单模和双模两种,双模简称BR,商标为Bluetooth Smart Ready,单模简称BLE或者LE,商标为Bluetooth Smart。Android是在4.3后才支持BLE,这说明不是所有蓝牙手机都支持BLE,而且支持BLE的蓝牙手机一般是双模的。双模兼容传统蓝牙,可以和传统蓝牙通信,也可以和BLE通信,常用在手机上,android4.3和IOS4.0之后版本都支持BR,也就是双模设备。单模只能和BR和单模的设备通信,不能和传统蓝牙通信,由于功耗低,待机长,所以常用在手环的智能设备上。

2.连接流程

android的ble连接流程图.png

BluetoothManager

用BluetoothManager来获取BluetoothAdapter。

BluetoothManager bluetoothManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);

BluetoothAdapter

代表了移动设备(如:手机)的本地的蓝牙适配器, 通过该蓝牙适配器可以对蓝牙进行基本操作,一个Android系统只有一个BluetoothAdapter,通过BluetoothManager获取。

BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

startLeScan()

既然获得了BluetoothAdapter对象,那么接下来就可以搜索ble设备了,这时就需要用到BluetoothAdapter的startLeScan()这个方法了

mBluetoothAdapter.startLeScan(mLeScanCallback); //此mLeScanCallback为回调函数

onLeScan(BluetoothDevice, rssi, byte[])

BluetoothDevice devic 为蓝牙对象可以获得mac地址,名字等信息

rssi为信号强度,为负数如:-100

scanRecord 为广播包和响应包组成的字节数组

1、当找到对应的设备后,立即停止扫描;

2、不要循环搜索设备,为每次搜索设置适合的时间限制。避免设备不在可用范围 的时候持续不停扫描,消耗电量。

private LeScanCallback mLeScanCallback = new LeScanCallback() {

@Override

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {

Log.i(TAG, "onLeScan() DeviceName------>"+device.getName());

if(device.getName() == null){

return;

}

if (device.getName().contains("xxxxx")) { //做设备过滤

mBluetoothDevice = device; //获取到周边设备

stopLeScan(); //停止

}

}

};

BluetoothGatt(连接蓝牙,建立GATT连接)

mBluetoothGatt = mBluetoothDevice.connectGatt(mContext, false, mGattCallback); //mGattCallback为回调接

上文已经成功连接ble设备,接下的数据交互操作,需要了解GATT(最后我会贴出全部代码)

3.什么是GATT?

GATT全称Generic Attribute Profile,中文名叫通用属性协议,它定义了services和characteristic两种东西来完成低功耗蓝牙设备之间的数据传输。它是建立在通用数据协议Attribute Protocol (ATT),之上的,ATT把services和characteristic以及相关的数据保存在一张简单的查找表中,该表使用16-bit的id作为索引。

一旦两个设备建立了连接,GATT就开始发挥作用,同时意味着GAP协议管理的广播过程结束了。但是必须要知道的是,建立GATT连接必要经过GAP协议。

最重要的事情,GATT连接是独占的,也就意味着一个BLE周边设备同时只能与一个中心设备连接。一旦周边设备与中心设备连接成功,直至连接断开,它不再对外广播自己的存在,其他的设备就无法发现该周边设备的存在了。

周边设备和中心设备要完成双方的通信只能通过建立GATT连接的方式。

GATT图解.png

一个ble蓝牙设备有多个包括多个Profile

一个Profile中有多个服务Service(通过服务的uuid找到对应的Service)

一个Service中有多个特征Characteristic(通过特征的uuid找到对应的Characteristic)

一个Characteristic中包括一个value和多个Descriptor(通过Descriptor的uuid找到对应的Descriptor)

UUID一般硬件工程师会告诉你的!!!

4.如何开发?

在AndroidManifest.xml添加权限

android:name="android.hardware.bluetooth_le"

android:required="true" />

获得开位置权限

android6.0以后搜索ble蓝牙需要获得位置权限,获得位置权限可查看MainActivity.java

由于代码太多我就不贴出来了,具体实现点击下面demo地址查看,先放下效果图

DEMO地址点击这里

扫描.jpg

发指令收广播.jpg

END

如果你就得帮助到你了,请点个赞吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。