安卓配网开发

更新时间:2019-04-03 10:07:26

依赖关系

配网SDK依赖以下SDK,在使用配网SDK前务必对相关SDK进行初始化。

依赖SDK 概述
API 通道 提供云端 API 通道能力
身份认证 提供云端 API 通道身份认证
Breeze SDK 提供蓝牙辅助配网支持

设备发现

在前面的章节中讲解了指定待配网设备的几种方案,本节讲解如何通过SDK的接口发现待配网设备。

注:只有某些配网方案可以让手机APP发现待配网设备。

// 开始发现设备
// enumSet 是需要使用的方显方式 EnumSet<DiscoveryType> 
// 第三个参数是获取 零配或智能路由器发现的待配设备 请求时需要携带的参数
LocalDeviceMgr.getInstance().startDiscovery(context, enumSet, null, new IDeviceDiscoveryListener() {
    @Override
    public void onDeviceFound(DiscoveryType discoveryType, List<DeviceInfo> list) {
        // 发现的设备
        // LOCAL_ONLINE_DEVICE 当前和手机在同一局域网已配网在线的设备
        // CLOUD_ENROLLEE_DEVICE 零配或智能路由器发现的待配设备
        // BLE_ENROLLEE_DEVICE 发现的是蓝牙设备,需要根据设备的productId查询设备是否是wifi+蓝牙双模设备
        // SOFT_AP_DEVICE 发现的设备热点
    }
});

注意:

  • 通过LOCAL_ONLINE_DEVICE发现的设备是已经连接到WiFi热点的WiFI设备、或者以太网设备,手机APP需要从云端获取产品网络类型进行确认,然后决定是否将发现的设备显示给用户选择

  • 已经连接到WiFI热点的WiFi设备不需要再次发起配网,直接调用绑定过程即可

停止发现设备

停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保与 startDiscovery 成对调用。

// 停止设备发现
LocalDeviceMgr.getInstance().stopDiscovery();

设备配网

关于设备配置添加相关 API 说明: AddDeviceBiz

设置待配网设备信息

当确定对某个型号的设备或者某个具体设备进行配网后,需要设置相关信息,如下示例所示:

DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = "xx"; // 商家后台注册的 productKey,不可为空
deviceInfo.deviceName = "xxx";// 设备名, 可为空
deviceInfo.productId = "xxx";// 产品 ID, 蓝牙辅助配网必须
deviceInfo.id= "xxx";// 设备热点的id,在发现热点设备返回到APP的时候会带这个字段,设备热点必须
// 设备热点配网 ForceAliLinkTypeSoftAP  蓝牙辅助配网 ForceAliLinkTypeBLE
deviceInfo.linkType = "ForceAliLinkTypeNone"; // 默认一键配网  

//设置待添加设备的基本信息
AddDeviceBiz.getInstance().setDevice(DeviceInfo deviceinfo);

配网时,开发者还可以指定配网方案,配网方案类型的定义请参见 LinkType

String linkType = "ForceAliLinkTypeBroadcast"; 
// 设置配网模式
AddDeviceBiz.getInstance().setAliProvisionMode(linkType);

设备信息相关实体类,请参见 DeviceInfo

开始设备配网

设置好待添加设备信息后,进入配网。调用 startAddDevice 接口进入配网流程。如使用手机热点方式配网, linkType= "ForceAliLinkTypePhoneAP", 需要用户确保应用已具备了 WRITE_SETTINGS 权限,该权限需要 APP 动态申请设备热点方式,需要申请位置权限。如果出现获取在某些高版本手机无法获取 WiFi SSID,需要申请位置权限,并打开 GPS。

// 开始添加设备
AddDeviceBiz.getInstance().startAddDevice(context, new IAddDeviceListener(){
    @Override
    public void onPreCheck(boolean b, DCErrorCode dcErrorCode) {
        // 参数检测回调 
    }

    @Override
    public void onProvisionPrepare(int prepareType) {
        // 热点配网、一键配网、蓝牙辅助配网会走到该流程,零配和智能路由器配网不会走到该流程
        // prepareType = 1提示用户输入账号密码
        // prepareType = 2提示用户手动开启指定热点 aha 12345678
        // 执行完上述操作之后,调用toggleProvision接口继续执行配网流程
    }

    @Override
    public void onProvisioning() {
        // 配网中
    }

    @Override 
    @Deprecated
    public void onProvisionStatus(ProvisionStatus provisionStatus) {
    }

    @Override
    public void onProvisionedResult(boolean b, DeviceInfo deviceInfo, DCErrorCode dcErrorCode) {
        // 配网结果
    }
});

在配网的过程中,在不同的状态下会调用相关的回调通知开发者状态的变化,配网回调接口的说明请参见IAddDeviceListener

onProvisionPrepare 回调

在收到 onProvisionPrepare 回调后,引导用户输入 ssid 和 password ,并调用此方法传入 ssid、password、timeout 信息启动配网。 只有热点配网、一键配网、蓝牙辅助配网场景下,才会触发 onProvisionPrepare 回调。如果出现部分手机一直无法获取到 SSID,可以打开 GPS 再获取 SSID(部分手机需要开启 GPS 才能获取到)。

String ssid = "ssid";// 热点配网的时候注意 要先获取ssid,然后再开启热点,否则无法正确获取到SSID
String ssid = "xxxxxxxx";
int timeout = 60;//单位秒 目前最短只能设置60S
AddDeviceBiz.getInstance().toggleProvision(ssid, password, timeout);

恢复手机 WiFi 连接

收到设备端返回的切换 WiFi 的成功回调之后调用恢复 WiFi 的接口,适用于于手机热点方案。

// 关闭热点 恢复 WiFi 连接
HotspotHelper.getInstance().recoverWiFiConnect(context);

恢复手机 WiFi 连接之后,直接调用 startAddDevice 接口进入设备配网监听,并在 onProvisionedResult 回调结果中接收是否配网成功的回调。

停止配网

如果配网过程中需要停止配网,可以调用stopAddDevice():

// 停止配网
AddDeviceBiz.getInstance().stopAddDevice();

results matching ""

    No results matching ""