写点什么

Android BLE 基础框架全新改版,android 音视频开发面试题

用户头像
Android架构
关注
发布于: 刚刚
  • 支持根据设备信号最小值过滤扫描设备;

  • 支持根据设备名称或 MAC 地址列表过滤扫描设备;

  • 支持根据设备 UUID 过滤扫描设备;

  • 支持根据指定设备名称或 MAC 地址搜索指定设备;

  • 支持连接设备失败重试;

  • 支持操作设备数据失败重试;

  • 支持绑定数据收发通道,同一种能力可绑定多个通道;

  • 支持注册和取消通知监听;

  • 支持配置最大连接数,超过最大连接数时会依据 Lru 算法自动断开最近最久未使用设备;

  • 支持配置扫描、连接和操作数据超时时间;

  • 支持配置连接和操作数据重试次数以及重试间隔时间。

简介

打造该库的目的是为了简化蓝牙设备接入的流程。该库是 BLE 操作的基础框架,只处理 BLE 设备通信逻辑,不包含具体的数据处理,如数据的分包与组包等。该库提供了多设备连接管理,可配置最大连接数量,并在超过最大连接数时会依据 Lru 算法自动断开最近最久未使用设备。该库还定制了常用的扫描设备过滤规则,也支持自定义过滤规则。该库所有操作都采用回调机制告知上层调用的结果,操作简单,接入方便。

效果展示


BLE 效果

使用介绍

权限配置

6.0 以下系统不需要配置权限,库中已经配置了如下权限:


<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>


而如果手机系统在 6.0 以上则需要配置如下权限:


<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>


因为蓝牙在 6.0 以上手机使用了模糊定位功能,所以需要添加模糊定位权限。

引入 SDK

在工程 module 的 build.gradle 文件中的 dependencies 中添加如下依赖:


compile 'com.vise.xiaoyaoyou:baseble:2.0.0'


构建完后就可以直接使用该库的功能了。

初始化

在使用该库前需要进行初始化,初始化代码如下所示:


//蓝牙相关配置修改 ViseBle.config().setScanTimeout(-1)//扫描超时时间,这里设置为永久扫描.setConnectTimeout(10 * 1000)//连接超时时间.setOperateTimeout(5 * 1000)//设置数据操作超时时间.setConnectRetryCount(3)//设置连接失败重试次数.setConnectRetryInterval(1000)//设置连接失败重试间隔时间.setOperateRetryCount(3)//设置数据操作失败重试次数.setOperateRetryInterval(1000)//设置数据操作失败重试间隔时间.setMaxConnectCount(3);//设置最大连接设备数量//蓝牙信息初始化,全局唯一,必须在应用初始化时调用 ViseBle.getInstance().init(this);


初始化可以是在 Application 中也可以是在 MainActivity 中,只需要是在使用蓝牙功能前就行。还有需要注意的是,蓝牙配置必须在蓝牙初始化前进行修改,如果默认配置满足要求也可以不修改配置。

设备扫描

库中针对设备扫描定义了几种常用过滤规则,如果不满足要求也可以自己定义过滤规则,下面针对库中提供的过滤规则使用方式一一介绍:


  • 扫描所有设备


ViseBle.getInstance().startScan(new ScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}));


  • 扫描指定设备 MAC 的设备


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


//该方式是扫到指定设备就停止扫描 ViseBle.getInstance().startScan(new SingleFilterScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}).setDeviceMac(deviceMac));


  • 扫描指定设备名称的设备


//该方式是扫到指定设备就停止扫描 ViseBle.getInstance().startScan(new SingleFilterScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}).setDeviceName(deviceName));


  • 扫描指定 UUID 的设备


ViseBle.getInstance().startScan(new UuidFilterScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}).setUuid(uuid));


  • 扫描指定设备 MAC 或名称集合的设备


ViseBle.getInstance().startScan(new ListFilterScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}).setDeviceMacList(deviceMacList).setDeviceNameList(deviceNameList));


  • 扫描指定信号范围或设备正则名称的设备


ViseBle.getInstance().startScan(new RegularFilterScanCallback(new IScanCallback() {@Overridepublic void onDeviceFound(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {


}


@Overridepublic void onScanTimeout() {


}}).setDeviceRssi(rssi).setRegularDeviceName(regularDeviceName));


其中扫描到的设备列表由 BluetoothLeDeviceStore 管理,而单个设备信息都统一放到BluetoothLeDevice中,其中包含了设备的所有信息,如设备名称、设备地址、广播包解析信息等,设备的相关信息会在设备详情中进行介绍。

设备连接

设备连接有三种方式,一种是根据设备信息直接进行连接,另外两种是在没扫描的情况下直接通过设备名称或设备 MAC 进行扫描连接。三种连接方式使用如下:


  • 根据设备信息连接设备


ViseBle.getInstance().connect(bluetoothLeDevice, new IConnectCallback() {@Overridepublic void onConnectSuccess(DeviceMirror deviceMirror) {


}


@Overridepublic void onConnectFailure(BleException exception) {


}


@Overridepublic void onDisconnect(boolean isActive) {


}});


  • 根据设备 MAC 直接扫描并连接


ViseBle.getInstance().connectByMac(deviceMac, new IConnectCallback() {@Overridepublic void onConnectSuccess(DeviceMirror deviceMirror) {


}


@Overridepublic void onConnectFailure(BleException exception) {


}


@Overridepublic void onDisconnect(boolean isActive) {


}});


  • 根据设备名称直接扫描并连接


ViseBle.getInstance().connectByName(deviceName, new IConnectCallback() {@Overridepublic void onConnectSuccess(DeviceMirror deviceMirror) {


}


@Override

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android BLE基础框架全新改版,android音视频开发面试题