蓝牙配网

更新时间:2024-09-03 07:05:48下载pdf

准备工作

  • 系统要求:蓝牙使用需要安卓 4.3 以及以上版本,智慧行业 App SDK 从安卓 6.0 开始支持。

  • Manifest 权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    
    <!-- Android 12 新增 -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    ...
    
  • 蓝牙权限检测:每次扫描和连接前,都要进行检测,否则 App 无法正常使用蓝牙。

    • App 在使用蓝牙连接或者扫描操作前,需要检查 App 定位权限是否被允许。
    • 检查蓝牙状态是否已开启。

      该部分检查逻辑,智慧行业 App SDK 未提供 API,您可自行检测。

IActivator 初始化

参数说明

参数名 类型 是否必填 说明
mode ActivatorMode 配网模式

代码示例

BLEActivator bleActivator = (BLEActivator) ActivatorService.activator(ActivatorMode.BLE);

扫描设备 IDiscovery 初始化

参数说明

参数名 类型 是否必填 说明
mode DiscoveryMode 扫描模式

代码示例

IDiscovery iDiscovery = ActivatorService.discovery(DiscoveryMode.BLE);

扫描设备参数

代码示例

DiscoveryParams discoveryParams = new DiscoveryParams(new DiscoveryParams.Builder().setTimeout(600_000));
iDiscovery.setParams(discoveryParams);

注册 IDiscoveryListener 监听扫描设备结果

参数说明

IBluetoothDevice数据模型说明

参数名 类型 说明
getId 函数 获取蓝牙设备的 ID
getName 函数 获取蓝牙设备的名称
getData 函数 获取设备数据
getConfigType 函数 获取配置类型
  • config_type_single:单点设备
  • config_type_wifi:双模设备
getAddress 函数 获取设备的蓝牙地址
getDeviceType 函数 获取设备类型
getUUID 函数 获取设备的 UUID
getMAC 函数 获取设备的 MAC 地址
getProductId 函数 获取设备的产品 ID
isBind 函数 判断设备是否已绑定
getFlag 函数
  • bit0:是否支持 5G,表明双模设备是否支持 5G Wi-Fi
  • bit2:是否分享设备
  • bit3:是否⽀持蓝牙兜底配网设备
  • bit4:是否是扫码配网设备

getDeviceType 表示待配网设备类型

getDeviceType 值 getConfigType 设备类型
200 config_type_single 蓝牙设备
300 config_type_single 蓝牙设备
301 config_type_wifi Wi-Fi + 蓝牙双模设备
304 config_type_wifi Wi-Fi + 蓝牙双模设备(支持蓝牙兜底配网)
400 config_type_single 蓝牙设备
401 config_type_wifi Wi-Fi + 蓝牙双模设备
404 config_type_wifi Wi-Fi + 蓝牙双模设备(支持蓝牙兜底配网)

代码示例

IDiscovery iDiscovery = ActivatorService.discovery(DiscoveryMode.BLE);
iDiscovery.setListener(new IDiscoveryListener() {
            @Override
            public void didDiscover(@NonNull IDiscoveryDevice iDiscoveryDevice) {
                if (iDiscoveryDevice instanceof IBluetoothDevice){
                    ((IBluetoothDevice) iDiscoveryDevice).getAddress();
                    ((IBluetoothDevice) iDiscoveryDevice).getId();
                }

            }
        });

扫描方法

//开始扫描
iDiscovery.startDiscovery();
//停止扫描
iDiscovery.stopDiscovery();

初始化配网参数

从扫描监听结果中,获取相关参数。

参数说明

参数名 类型 是否必填 说明
address String 蓝牙设备的地址
assetId String 设备的资产或空间 ID
deviceType Int 设备类型
uuid String 设备的 UUID
productId String 设备的产品 ID
time long 激活超时时间(单位:毫秒)
BLEActivatorParams params = new BLEActivatorParams.Builder()
                .setAddress("address")
                .setAssetId("assetId")
                .setDeviceType(deviceType)
                .setUuid("uuid")
                .setProductId("productId")
                .setTimeout(time)
                .build();
        bleActivator.setParams(params);

注册 IActivatorListener 监听配网结果

代码示例

bleActivator.setListener(new IActivatorListener() {
            @Override
            public void onSuccess(@Nullable IDevice iDevice) {
                Log.d(TAG, "onSuccess: ");

            }

            @Override
            public void onError(@NonNull String s, @NonNull String s1) {
                Log.d(TAG, "onError: ");

            }
        });

开始配网

该方法用于开始设备配对操作。

代码示例

bleActivator.start();

停止配网

代码示例

bleActivator.stop();

销毁配网实例

代码示例

bleActivator.destroy();